stackoverflow问题的共识表明它是未定义的行为。
然而,我最近看到查尔斯湾2016年的一次演讲题为:
无处不在的指令重新排序:C ++' As-If"规则和序列的作用。
在37:53,他显示以下内容:
C ++条款
未定义行为:缺乏限制因素
(全局初始化的顺序)未指定行为:约束违规
(解除引用NULL 指针)
现在我有相互矛盾的信息 这是一个错字吗?有什么变化吗?
答案 0 :(得分:2)
这是未定义的行为。
来自C ++ 11标准的 8.3.2参考(强调我的):
5 ... [注意:特别是,在明确定义的程序中不能存在空引用,因为创建这样的引用的唯一方法是将它绑定到“对象” “通过取消引用空指针获得,这会导致未定义的行为。如9.6中所述,引用不能直接绑定到位字段。 - 结束记录]
答案 1 :(得分:0)
这些例子与错误的事情有关。无论你假设什么版本的C ++标准(即标准中没有任何变化,在这方面)。
取消引用NULL指针会产生未定义的行为。该标准没有对结果发生的任何约束进行定义。
全局变量初始化的顺序是未指定行为的一个例子(标准保证所有全局变量将被初始化[这是对全局变量初始化的约束]但未指定顺序)。