【发布时间】:2015-03-12 05:15:51
【问题描述】:
我是 C++ 程序员。在冲浪期间,我熟悉了诸如未定义行为、未指定行为、实现定义行为等术语。我想知道为什么有些事情没有定义?我知道 C++ 与硬件很接近,但是为其中一些定义行为真的很难吗?如果是这样,他们为什么不这样做?这个问题是关于为编译器实现留下这么多行为的背后的哲学。我认为并相信这样做有以下两个优点:
1) 它可以提供更好的性能。它简化了编译器的工作,使得在某些情况下生成非常高效的代码成为可能。
2) 它允许编译器供应商灵活地以自己的方式实现它 大大地。
如果您知道性能以外的任何其他因素,请告诉我。 我们将非常感谢您的帮助。
谢谢
【问题讨论】:
-
“C++ 标准应该更长”从来没有人说过。也就是说,虽然这肯定是一个有趣的问题,但我不确定它是否属于 SO。
-
一个例子:在类型宽度上左移是未定义的行为,因为某些 CPU 不会屏蔽移位量
-
这并不能回答问题,但那些文章让我在 UB 上读了一遍:blog.llvm.org/2011/05/what-every-c-programmer-should-know.html
-
@meet 我是这么认为的,所以我说它不会回答你的问题。但是对于其他读者来说,这可能非常有用。
标签: c++ language-lawyer undefined-behavior