[问题] const 变量在.h, undefined behavior?

楼主: lovejomi (JOMI)   2019-07-24 22:19:42
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吗
谢谢
楼主: lovejomi (JOMI)   2019-07-24 23:10:00
手机复制贴上@@ 等等修改 抱歉
作者: james732 (好人超)   2019-07-24 22:38:00
你的乱码好多 XD
作者: LPH66 (-6.2598534e+18f)   2019-07-25 17:44:00
执行两次 ctor 正是他的第三点在说的你以为只有一个全域变量其实有两个其证据即是建构子被执行了两次那在同一支程式里有两个同名字的不同全域变量即是 UB 了这是明确违反 one-definition rule 的 UB后半篇文章的 inline (C++17) 和 extern (pre-C++17)它们的作用并不一样: "It looks somewhat similar toinline, but its effect is very different."
楼主: lovejomi (JOMI)   2019-07-27 09:56:00
请问 static变量internal linkage的话 他会被mangling成 不同名字的symbol, 这样还是违反odr吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com