将变量传递给同一语句中的多个函数,这是编译器错误吗?

时间:2017-12-01 21:03:42

标签: c++ visual-studio-2010 visual-c++

我在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”。

这是以某种方式调用未定义的行为,从而意外地执行,还是编译器错误?

0 个答案:

没有答案