Re: [討論] 另一種 C++ 巨集

看板CSSE (電腦科學及軟體工程)作者 (讀者)時間20年前 (2005/02/23 23:54), 編輯推噓1(104)
留言5則, 1人參與, 最新討論串3/5 (看更多)
※ 引述《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
ok, 應該是例子的問題, 因為在此例中, 我認為f()
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
然而, 如何在 runtime 產生實體呢? 在 runtime
61.230.218.28 02/24, 3F

61.230.218.28 02/24, , 4F
會動態增減的 code? 感覺上有一個直譯器, 最後還
61.230.218.28 02/24, 4F

61.230.218.28 02/24, , 5F
不是以呼叫函數的方式來呼叫 f()
61.230.218.28 02/24, 5F
文章代碼(AID): #127ATJtX (CSSE)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 3 之 5 篇):
文章代碼(AID): #127ATJtX (CSSE)