gpt4 book ai didi

c++ - retval = false && someFunction();//someFunction() 是否被调用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:04:19 27 4
gpt4 key购买 nike

我目前正在使用 Diab 4.4 C++ 编译器。这是一个完整的 POS,不符合 ANSI,我过去发现过它的问题。

我想知道下面的问题是编译器的问题,还是我对C++知识的不足

我意识到 x = x && y; 的形式如果 x 为假,将短路 y 部分。编译器正在做的是在 x = x && y(); 的情况下短路。其中 y() 是非常量函数。

class A
{
int _a;
A(int a) { _a = a; }
bool someFunction() { _a = 0; return true; }
};

main(...)
{
A obj = A(1);
bool retval = false;

retval = retval && A.someFunction();

/* What is the value of A._a here? */
}

对我来说似乎不对劲的事实是,即使 someFunction() 不是 const 函数,编译器也会进行这种短路。如果它不是 const,当 retval 为 false 时,编译器是否通过跳过 A.someFunction() 越界?

此外,我意识到可以通过编写 retval = A.someFunction() && retval; 来避免这个问题。但我真的很想知道为什么会这样。

最佳答案

短路适用于所有表达式,无论 const 是什么。跳过对 someFunction() 的调用是正确的。

关于c++ - retval = false && someFunction();//someFunction() 是否被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406643/

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