【发布时间】:2015-09-12 05:10:01
【问题描述】:
这是我的代码:
b = f() || b;
函数f() 有副作用,必须始终执行。通常,只有正确的操作数可以短路,这段代码应该可以工作。但恐怕有些编译器会颠倒这两个操作数,因为短路函数评估比简单的变量评估更有效。我知道 g++ -O3 可以打破一些规范,但我不知道这段代码是否会受到影响。
那么,我的代码没有风险吗?
我知道Is short-circuiting logical operators mandated? And evaluation order?,但我的问题是关于编译器优化,我不知道它们不能违反标准(即使这很奇怪)。
【问题讨论】:
-
g++ -O3不会破坏规范。它可能会破坏您的代码,但不会破坏 C++ 标准。 -
@KerrekSB 好的,所以它只能破解错误的代码,而这些代码只能靠运气与其他选项一起工作?
-
是的,绝大多数时候都是这样。
-
@KerrekSB 还有什么其他情况?
-
我真的不知道。有时真正的编译器错误只有在您进行大量优化时才会出现,但这些都是错误,而不是故意违规。也就是说,GCC 似乎有
-Ofast,上面写着“忽略严格的标准合规性”。我认为其中大部分将涉及浮点运算。
标签: c++ compilation short-circuiting