我目前正在使用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