【发布时间】:2017-02-17 03:40:13
【问题描述】:
stackoverflow 问题的共识说这是未定义的行为。
不过,我最近看到了 Charles Bay 在 2016 年的演讲,题目是:
指令重新排序无处不在:C++ 的“假设”规则和序列的作用。
在37:53,他显示以下内容:
C++ 术语
未定义行为:缺乏约束
(全局初始化的顺序)未指定行为:违反约束
(取消引用 NULL 指针)
现在我有相互矛盾的信息。
这是一个错字吗?有什么变化吗?
【问题讨论】:
-
这是向后的。失败!
-
应该交换示例。这很可能是一个错字!
-
正如纳瓦兹所说。该标准没有指定初始化全局变量/静态变量的总顺序,但它确实定义了它们被初始化(以某些未指定顺序)。空指针取消引用仍然是未定义的行为。
-
@Xeo:同时,DR#315 (open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#315) 声称,如果不涉及左值到右值的转换,则可以取消引用空指针来调用成员函数。
标签: c++ pointers null undefined-behavior unspecified-behavior