[問題] const 變數在.h, undefined behavior?

看板C_and_CPP作者 (JOMI)時間5年前 (2019/07/24 22:19), 5年前編輯推噓1(1011)
留言12則, 3人參與, 5年前最新討論串1/2 (看更多)
https://www.fluentcpp.com/2019/07/23/how-to-define-a-global-constant-in-cpp/ 偶然看到這篇,我其實覺得他寫錯 這部分 Each file has its own version of焏. This is a problem for three reasons: it is undefined behaviour (objects must be defined only once in C++), ??????真的undefined嗎?有沒有什麼表格或網址整理ub...之前看到說把東西寫在 namespace std也是ub...也太多很容易就寫出來的ub了吧 it uses more memory, if the constructor (or destructor) of曱温as side effects, they will be execute d twice. 這句看不懂,什麼是side effect在這裡? 他的範例我唯一能看出問題的就是你沒辦法保證cout比他的x先初始化 其他他說執行兩次cstor不是很正常嗎? 我只記得const自帶static,所以預設是internal linkage https://en.cppreference.com/w/cpp/language/cv 的Note也是這樣寫 但他說是ub 我覺得很奇怪….. 最後他提到inline, inline跟extern效果一樣,意思是c++鼓勵使用inline而不是extern嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.11.66.55 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1563977987.A.CFC.html ※ 編輯: lovejomi (39.11.66.55 臺灣), 07/24/2019 22:25:24 ※ 編輯: lovejomi (39.11.66.55 臺灣), 07/24/2019 22:26:45

07/24 22:38, 5年前 , 1F
你的亂碼好多 XD
07/24 22:38, 1F

07/24 23:10, 5年前 , 2F
手機複製貼上@@ 等等修改 抱歉
07/24 23:10, 2F
※ 編輯: lovejomi (110.28.106.14 臺灣), 07/25/2019 17:03:38

07/25 17:44, 5年前 , 3F
執行兩次 ctor 正是他的第三點在說的
07/25 17:44, 3F

07/25 17:45, 5年前 , 4F
你以為只有一個全域變數其實有兩個
07/25 17:45, 4F

07/25 17:45, 5年前 , 5F
其證據即是建構子被執行了兩次
07/25 17:45, 5F

07/25 17:48, 5年前 , 6F
那在同一支程式裡有兩個同名字的不同全域變數即是 UB 了
07/25 17:48, 6F

07/25 17:49, 5年前 , 7F
這是明確違反 one-definition rule 的 UB
07/25 17:49, 7F

07/25 17:50, 5年前 , 8F
後半篇文章的 inline (C++17) 和 extern (pre-C++17)
07/25 17:50, 8F

07/25 17:51, 5年前 , 9F
它們的作用並不一樣: "It looks somewhat similar to
07/25 17:51, 9F

07/25 17:51, 5年前 , 10F
inline, but its effect is very different."
07/25 17:51, 10F

07/27 09:56, 5年前 , 11F
請問 static變數internal linkage的話 他會被mangling
07/27 09:56, 11F

07/27 09:56, 5年前 , 12F
成 不同名字的symbol, 這樣還是違反odr嗎?
07/27 09:56, 12F
文章代碼(AID): #1TE6a3py (C_and_CPP)
文章代碼(AID): #1TE6a3py (C_and_CPP)