作者lovejomi (JOMI)
看板C_and_CPP
标题[问题] const 变数在.h, undefined behavior?
时间Wed Jul 24 22:19:42 2019
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://webptt.com/cn.aspx?n=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
1F:→ james732: 你的乱码好多 XD07/24 22:38
2F:→ lovejomi: 手机复制贴上@@ 等等修改 抱歉07/24 23:10
※ 编辑: lovejomi (110.28.106.14 台湾), 07/25/2019 17:03:38
3F:推 LPH66: 执行两次 ctor 正是他的第三点在说的 07/25 17:44
4F:→ LPH66: 你以为只有一个全域变数其实有两个 07/25 17:45
5F:→ LPH66: 其证据即是建构子被执行了两次 07/25 17:45
6F:→ LPH66: 那在同一支程式里有两个同名字的不同全域变数即是 UB 了 07/25 17:48
7F:→ LPH66: 这是明确违反 one-definition rule 的 UB 07/25 17:49
8F:→ LPH66: 後半篇文章的 inline (C++17) 和 extern (pre-C++17) 07/25 17:50
9F:→ LPH66: 它们的作用并不一样: "It looks somewhat similar to 07/25 17:51
10F:→ LPH66: inline, but its effect is very different." 07/25 17:51
11F:→ lovejomi: 请问 static变数internal linkage的话 他会被mangling 07/27 09:56
12F:→ lovejomi: 成 不同名字的symbol, 这样还是违反odr吗? 07/27 09:56