kigi@1Hz
@kaigiks
說
Fri, Oct 4, 2019 8:22 AM
Fri, Oct 4, 2019 8:23 AM
1
[問題] const 變數在.h, undefined behavior?
Re: [問題] const 變數在.h, undefined behavior?
今天幫人 debug, 遇到記憶體不同的奇怪 bug.
後來想到這篇,發現真的是踩到這個。
🌈拉茲媽㍿🌈
@wlndclion
Fri, Oct 4, 2019 8:25 AM
道行太淺,看不懂XD
不過我跟C++不熟
kigi@1Hz
@kaigiks
Sat, Oct 5, 2019 5:33 AM
🌈拉茲媽㍿🌈
: 沒差啦XD.
其實我覺得會撞這個 bug 也不是那麼容易的事情。
kigi@1Hz
@kaigiks
Sat, Oct 5, 2019 5:39 AM
另外算做個註記。
LPH66 會提到這個算 UB 應該是違反 ODR(但編譯給過)
不過思考過後我和原 po 意見類似,既然有 const object 爲 internal linkage 的情況存在,好像不太能算 UB.
不過是不是真的有這條 rule 就要看規範了,我到現在還是不太會看 C++ 規範。
kigi@1Hz
@kaigiks
Sat, Oct 5, 2019 5:46 AM
再補充。
之所以說撞這個 bug 不容易是因爲如果這個 const 變數是一般的型別,那其實不會有什麼問題,畢竟就是讀個 const。
不過如果在 constructor 裡頭有分配動態記憶體,那不同份 .cpp 中的這個物件是分別呼叫 constructor 拿到各自的記憶體位置。
所以前提是
1. 這個物件要有建構子,且有自行動態分配記憶體,或是物件裡的物件會分配記憶體。
2. 裡頭的這塊記憶體會被更改。
才會在實際執行上有問題發生。
載入新的回覆
Re: [問題] const 變數在.h, undefined behavior?
今天幫人 debug, 遇到記憶體不同的奇怪 bug.
後來想到這篇,發現真的是踩到這個。
不過我跟C++不熟
其實我覺得會撞這個 bug 也不是那麼容易的事情。
LPH66 會提到這個算 UB 應該是違反 ODR(但編譯給過)
不過思考過後我和原 po 意見類似,既然有 const object 爲 internal linkage 的情況存在,好像不太能算 UB.
不過是不是真的有這條 rule 就要看規範了,我到現在還是不太會看 C++ 規範。
之所以說撞這個 bug 不容易是因爲如果這個 const 變數是一般的型別,那其實不會有什麼問題,畢竟就是讀個 const。
不過如果在 constructor 裡頭有分配動態記憶體,那不同份 .cpp 中的這個物件是分別呼叫 constructor 拿到各自的記憶體位置。
所以前提是
1. 這個物件要有建構子,且有自行動態分配記憶體,或是物件裡的物件會分配記憶體。
2. 裡頭的這塊記憶體會被更改。
才會在實際執行上有問題發生。