我在VC ++ 2010中遇到了奇怪的行为,我认为这是一个编译错误,除非我遗漏了一些明显的东西:
class A
{
public:
A& B(int& value)
{
value = 10;
return *this;
}
A& C(int value)
{
printf("%d\r\n", value);
return *this;
}
A& D(int value1, int value2)
{
printf("%d, %d\r\n", value1, value2);
return *this;
}
}
int main()
{
A a;
int x = 0; // get uninitialized variable warning if I don't assign x
a.B(x).C(x).D(x, x - 1);
}
我希望:
10
10, 9
但它确实打印出来:
10
10, -1
显然假设x不能被任何先前的函数调用修改,并将“x - 1”替换为“-1”。
这是以某种方式调用未定义的行为,从而意外地执行,还是编译器错误?