正在解引用被认为是未指定或未定义行为的NULL指针



关于stackoverflow问题的一致意见认为这是未定义的行为。

然而,我最近看到了Charles Bay 2016年的演讲,题为:
指令到处重排序:c++的As-If"规则与序列的作用。

在37:53他展示了以下内容:

c++术语

未定义行为:缺乏约束
(全局变量初始化顺序)

未指定行为:约束违反
(非关联化空指针)

现在我得到了相互矛盾的信息。
这是打错了吗?有什么变化吗?

未定义行为。

选自8.3.2 c++ 11标准的参考文献(强调我的):

5…[注意:特别是,空引用不能存在于定义良好的程序中,因为创建这种引用的唯一方法是将其绑定到通过解引用空指针获得的"对象",这会导致未定义的行为。如9.6节所述,引用不能直接绑定到位域。- 结束说明]

这些例子与错误的东西相关联。无论您采用的是哪个版本的c++标准(也就是说,在这方面,标准中没有任何变化)。

对NULL指针解引用会产生未定义的行为。该标准没有对结果定义任何约束。

全局变量初始化的顺序是一个未指定行为的例子(标准保证所有全局变量都将被初始化[这是对全局变量初始化方式的约束],但顺序没有指定)。

相关内容

  • 没有找到相关文章

最新更新