作者reader (讀者)
看板CSSE
標題Re: [討論] 另一種 C++ 巨集
時間Thu Feb 24 00:04:18 2005
※ 引述《reader (讀者)》之銘言:
:
: 一般必須在執行時期處理的狀況,主要是因為有遞迴問題和設值問題,
: 例如:
:
: int f(int i) = { if(i < 2) return 1; return f(i-1) + f(i-2); }
:
: void g(int x) {
:
: f = f(x);
:
: }
:
: 像這樣子就不能在編譯時期完成了。但是這並不是主要應用,就 C++ 的
: 原始想法而言(我搞不懂現在 C++ 標準委員會的想法),可以避免動態
: 機制的話就儘量避免,而現在看起來是做得到的。
:
:
: --
: 推 jeunder:恕我愚鈍, 體會不出你的例子有 "必須在執行時期 61.230.218.28 02/23
: → jeunder:處理" 的必要性耶... Q_Q 61.230.218.28 02/23
: 推 jeunder:感覺上只是 compile time 的文字代換而已 61.230.218.28 02/23
喔? f(x) 的參數是執行時期才得到的呢,這樣如何能夠在編譯時期決定呢?
這是費波那契數,f(3) 就要代換 3 次, f(4) 則需要 5 次, f(5) 是 8 次,
當 f(x) 的參數是變數時,應該是不能預先決定代換的次數才對。
另外,如果可以重覆設定,也就等於是變數了,例如在非常數的判斷式中使用,
這樣應該也不能在編譯時期決定吧。
所以必須強制不能使用遞迴和設值,才能在編譯時期決定。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.222.173.26
1F:推 jeunder:ok, 應該是例子的問題, 因為在此例中, 我認為f() 61.230.218.28 02/24
2F:→ jeunder:是個函數, 只需存在一個實體就夠了... 61.230.218.28 02/24
3F:→ jeunder:然而, 如何在 runtime 產生實體呢? 在 runtime 61.230.218.28 02/24
4F:→ jeunder:會動態增減的 code? 感覺上有一個直譯器, 最後還 61.230.218.28 02/24
5F:→ jeunder:不是以呼叫函數的方式來呼叫 f() 61.230.218.28 02/24