为什么这个C ++代码输出结果?

时间:2012-03-25 01:56:26

标签: c++

这是C++代码:

#include<iostream>
using namespace std;


int a=8;

int fun(int &a)
{
    a=a*a;
    return a;
}

int main()
{

    cout << a << endl \
        << fun(a) << endl \
        << a << endl;
        return 0;
}

为什么输出:

64 64 8

<<运算符的关联性是从左到右,为什么不输出8 64 64

它与序列点和效果方面有关系吗?

1 个答案:

答案 0 :(得分:24)

关联性和评估顺序不是一回事。由于从左到右的关联性,表达式a << b << c等同于(a << b) << c,但是当涉及评估顺序时,编译器可以先评估c然后a << b同样,它可以在评估b之前评估a。实际上,它甚至可以按照bca的顺序评估这些术语,如果它可以通过最小化管道来推断这样的订单将最大化性能失速,缓存未命中等等。