Re: [問題] 一個簡單的const問題
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間15年前 (2011/07/05 14:25)推噓5(5推 0噓 8→)留言13則, 6人參與討論串2/4 (看更多)
※ 引述《XYX16888 (XYX)》之銘言:
: MAC OS / xcode 4 compile
: code :
: int main(void)
: {
: const int var = 10;
: int *vptr = &var;
: *vptr = 20;
: printf("%d\n", var);
^^^
compile 到這一行的時候
聰明的 compiler 發現 var 是常數
所以不需要再從記憶體中取值了
直接把 10 拿來傳進 printf 即可
這叫 constant propagation
是相當基本的最佳化技術
: 想請問*vptr 到底改到哪裡的值?
: 明明不是有把var的地址assign給vptr嗎?
: 結果因為var是const 變數 因此 assign *vptr為20時 到底改到哪裡的值?
: 謝謝
因為你跟 compiler 說 var 是常數
所以他假設 *vptr 不管發生什麼事,var 都固定是 10
但是 compiler 並沒有義務一定要做 constant propagation
也就是即使他輸出 20 那也不是他的責任
試圖寫入常數是 undefined behavior
上述的 code 在 C++ 中甚至直接視為 compile error
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.15.163
推
07/05 14:28, , 1F
07/05 14:28, 1F
推
07/05 14:31, , 2F
07/05 14:31, 2F
→
07/05 14:32, , 3F
07/05 14:32, 3F
推
07/05 14:35, , 4F
07/05 14:35, 4F
推
07/05 14:37, , 5F
07/05 14:37, 5F
→
07/05 14:37, , 6F
07/05 14:37, 6F
→
07/05 14:42, , 7F
07/05 14:42, 7F
→
07/05 14:43, , 8F
07/05 14:43, 8F
→
07/05 16:38, , 9F
07/05 16:38, 9F
→
07/05 16:38, , 10F
07/05 16:38, 10F
→
07/05 16:45, , 11F
07/05 16:45, 11F
→
07/05 16:45, , 12F
07/05 16:45, 12F
推
07/05 23:13, , 13F
07/05 23:13, 13F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章