这是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
?
它与序列点和效果方面有关系吗?
答案 0 :(得分:24)
关联性和评估顺序不是一回事。由于从左到右的关联性,表达式a << b << c
等同于(a << b) << c
,但是当涉及评估顺序时,编译器可以先评估c
然后a << b
同样,它可以在评估b
之前评估a
。实际上,它甚至可以按照b
→c
→a
的顺序评估这些术语,如果它可以通过最小化管道来推断这样的订单将最大化性能失速,缓存未命中等等。