gpt4 book ai didi

c++ - 是否可以默认使用 UB?

转载 作者:行者123 更新时间:2023-11-30 00:42:39 31 4
gpt4 key购买 nike

所以,我一直在阅读 the C++ standard并来到 [defns.undefined](我正在阅读的 C++17 草案中的 3.27。请注意,虽然我在这里引用 C++17,但我在 other standards 中发现了类似的措辞)——是未定义行为的定义。我注意到这个措辞(强调我的):

Note: Undefined behavior may be expected when this International Standard omits any explicit definition of behavior or when a program uses an erroneous construct or erroneous data

现在,考虑到这一点,这是有道理的。这有点像说,如果标准没有为它提供行为,它就有未定义的行为。好像是说,如果你做的事情超出了标准的范围,标准就无话可说了。这是有道理的。

然而,这也有点奇怪,因为我一直认为未定义行为必须由标准显式声明。然而,这似乎意味着我们应该假定未定义的行为,除非我们被告知有其他情况。

如果是这种情况,那么会不会有未定义行为的实例是未定义行为,因为标准没有明确给出某些构造的行为?如果这样的事情是可能的,那么是否有可能生成一个未定义行为的示例(仍然可以编译),因为这个措辞是未定义的行为,或者任何属于这个的东西都接近由于某种原因无法构建?

最佳答案

If this is the case, then couldn't there be instances of Undefined Behavior that are Undefined Behavior because the Standard didn't explicitly give a behavior for some construct?

我认为这是正确的观点。如果标准“意外地”省略了特定构造行为方式的规范,但这是我们都知道“应该”明确定义的东西,那么它就是标准中的一个缺陷,需要修复。另一方面,如果它是一个“应该”是 UB 的构造,那么该标准就已经是“正确的”(尽管明确有好处)。

例如,如果对象的构造函数尚未开始执行或析构函数已完成,则标准未提及如果将 typeid 应用于多态类类型的左值会发生什么。因此,该行为未被遗漏定义。这也是“显然”UB 的东西。所以没有问题。

关于c++ - 是否可以默认使用 UB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58884550/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com