【发布时间】:2019-11-15 20:57:08
【问题描述】:
所以,我一直在阅读 the C++ standard 并来到 [defns.undefined](我正在阅读的 C++17 草案中的 3.27。请注意,虽然我在这里引用 C++17,但我'在other standards) 中找到了类似的措辞——这是未定义行为的定义。我注意到这个措辞(强调我的):
注意:当本国际标准省略任何明确的定义时,可能会出现未定义的行为 行为或当程序使用错误的构造或错误的数据时
现在,考虑到这一点,这是有道理的。有点意思是,如果标准没有为它提供行为,它就有未定义的行为。似乎是在说,如果你做的事情超出了标准的范围,标准就没有什么可说的了。这是有道理的。
然而,这也有点奇怪,因为我一直认为未定义的行为必须由标准明确声明。然而,这似乎暗示我们应该假设未定义的行为,除非我们另有说明。
如果是这种情况,那么由于标准没有明确地为某些构造提供行为,是否会有未定义行为的实例是未定义行为?如果这样的事情是可能的,是否有可能生成一个未定义行为的示例(仍然可以编译),因为这个措辞是未定义的行为,或者任何属于这种情况的东西都在附近由于某种原因无法构建?
【问题讨论】:
-
这似乎暗示我们应该假设未定义的行为,除非我们另有说明这很明显,不是吗?
-
直到我读到:D.
-
请注意,注释是非规范性的。那个小宣传实际上有部分标准支持它,你只需要找到它们。
-
似乎与此问答密切相关stackoverflow.com/questions/26526426/…
标签: c++ language-lawyer undefined-behavior