看板 C_and_CPP 關於我們 聯絡資訊
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
james732: 你的亂碼好多 XD07/24 22:38
lovejomi: 手機複製貼上@@ 等等修改 抱歉07/24 23:10
※ 編輯: lovejomi (110.28.106.14 臺灣), 07/25/2019 17:03:38
LPH66: 執行兩次 ctor 正是他的第三點在說的 07/25 17:44
LPH66: 你以為只有一個全域變數其實有兩個 07/25 17:45
LPH66: 其證據即是建構子被執行了兩次 07/25 17:45
LPH66: 那在同一支程式裡有兩個同名字的不同全域變數即是 UB 了 07/25 17:48
LPH66: 這是明確違反 one-definition rule 的 UB 07/25 17:49
LPH66: 後半篇文章的 inline (C++17) 和 extern (pre-C++17) 07/25 17:50
LPH66: 它們的作用並不一樣: "It looks somewhat similar to 07/25 17:51
LPH66: inline, but its effect is very different." 07/25 17:51
lovejomi: 請問 static變數internal linkage的話 他會被mangling 07/27 09:56
lovejomi: 成 不同名字的symbol, 這樣還是違反odr嗎? 07/27 09:56