我目前正在使用Diab 4.4 C++编译器。这是一个总的POS,不符合ANSI标准,过去我发现它存在问题。retval = false && someFunction(); //是否调用someFunction()?
我想知道如果下面的问题是编译器的问题,或者在我的C++
知识的缺点我意识到,X = X & & y的形式;如果x是假的,将使y部分短路。编译器正在做的事情是在x = x & & y()的情况下短路。其中y()是一个非const函数。
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;但我真的很想知道为什么会发生这种情况。
没有意识到评价是懒惰的。现在更有意义。 – 2009-09-10 17:48:17
...或使用&如果两个操作数都是/返回布尔值。 – RJFalconer 2009-12-31 15:55:22