How do we explain the result of the [removed]++x)+(++x)+(++x)?

后端 未结 5 1662
滥情空心
滥情空心 2020-11-28 13:05
x = 1;
std::cout << ((++x)+(++x)+(++x));

I expect the output to be 11, but it\'s actually 12. Why?

5条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-28 13:37

    As others have said, the C and C++ standards do not define the behaviour that this will produce.

    But for those people who don't see why the standards would do such a thing, let's go through a "real world" example:

    1 * 2 + 3 + 4 * 5
    

    There's nothing wrong with calculating 1 * 2 + 3 before we calculate 4*5. Just because multiplication has a higher precedence than addition doesn't mean we need to perform all multiplication in the expression before doing any addition. In fact there are many different orders you validly could perform your calculations.

    Where evaluations have side effects, different evaluation orders can affect the result. If the standard does not define the behaviour, do not rely on it.

提交回复
热议问题