精華區beta Programming 關於我們 聯絡資訊
※ 引述《tomhuang (阿培仔)》之銘言: > 再順便問一下,最後兩個會有錯,是不是因為它是一個計算式呢? 你是用什麼 compiler ? 我用 gcc 可以正確地 compile > 如果 const int 後面是個不需計算的數字,看之前回文似乎以 -O 最佳化後 > 它會變成和 #define 一樣的效果,那最後兩個需計算的值呢? > 是存在記憶體中,還是變成立即值加到組語指令後面? > 如果需計算的值,全部仍是由 const int 組成,那最佳化後, > compiler 一樣會在 compile time 先算出它們的值嗎? 看情況 比如說你的 const 和用到常數的地方是定義在同一個模組之中 const int FOO = 256; int foo(){ cout << FOO << endl; } 這種 compiler 會幫你最佳化 直接拿 256 塞給 cout 不過如果你定義在另一個模組之中... extern const int FOO; int foo(){ cout << FOO << endl; } compiler 會把 FOO 視為一般變數 由位址取出值後再 cout 另外 const 在定義時必須給一個 compile time 可求值的 expression 所以如果你這樣寫... const int FOO = 10; const int BAR = FOO * 2; compiler 會幫你把 FOO 乘上二以後 assign 給 BAR 所以如果用 debugger 看 一開始 BAR 的值就是 20 -- ※ Origin: SayYA 資訊站 <bbs.sayya.org> ◆ From: arisa.csie.org