※ 引述《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