gpt4 book ai didi

c++ - C++ 中的 If 语句,主体为空 : is condition guaranteed to be evaluated?

转载 作者:可可西里 更新时间:2023-11-01 17:44:52 30 4
gpt4 key购买 nike

鉴于此声明(作为旁注,这不是我喜欢的编码风格)

if( doSomething() ) {}

“C++ 标准”是否保证函数被调用?(它的返回值对执行路径没有影响,所以编译器可能会遵循捷径评估的思想并将其优化掉。)

最佳答案

不涉及短路运算符,因此如果在不消除副作用的情况下无法优化函数,则可以保证调用该函数。引用 C++11 标准:

[...] conforming implementations are required to emulate (only) the observable behavior of the abstract machine as explained below.5

5 This provision is sometimes called the “as-if” rule [...] an actual implementation need not evaluate part of an expression if it can deduce that its value is not used and that no side effects affecting the observable behavior of the program are produced.

所以,像

int doSomething() { return 1; }

可能会被优化掉,但是

int doSomething() { std::cout << "d\n"; return 1; }

不允许。

此外,从 C++11 开始,您可以编写更复杂的函数,并且仍然可以使用 constexpr 使它们在编译时求值。 .

关于c++ - C++ 中的 If 语句,主体为空 : is condition guaranteed to be evaluated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33277340/

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