精華區beta CSSE 關於我們 聯絡資訊
※ 引述《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
jeunder:ok, 應該是例子的問題, 因為在此例中, 我認為f() 61.230.218.28 02/24
jeunder:是個函數, 只需存在一個實體就夠了... 61.230.218.28 02/24
jeunder:然而, 如何在 runtime 產生實體呢? 在 runtime 61.230.218.28 02/24
jeunder:會動態增減的 code? 感覺上有一個直譯器, 最後還 61.230.218.28 02/24
jeunder:不是以呼叫函數的方式來呼叫 f() 61.230.218.28 02/24