Re: [討論] 另一種 C++ 巨集
※ 引述《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
推
61.230.218.28 02/24, , 1F
61.230.218.28 02/24, 1F
→
61.230.218.28 02/24, , 2F
61.230.218.28 02/24, 2F
→
61.230.218.28 02/24, , 3F
61.230.218.28 02/24, 3F
→
61.230.218.28 02/24, , 4F
61.230.218.28 02/24, 4F
→
61.230.218.28 02/24, , 5F
61.230.218.28 02/24, 5F
討論串 (同標題文章)
CSSE 近期熱門文章
PTT數位生活區 即時熱門文章