这是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;
}
Run Code Online (Sandbox Code Playgroud)
为什么输出:
64 64 8该<<运营商的关联性为从左到右,那么为什么不输出8 64 64?
它与序列点和效果方面有关系吗?
Mar*_*tos 24
关联性和评估顺序不是一回事.表达a << b << c相当于(a << b) << c因左到右结合,但是当涉及到评估顺序,编译器是免费的,以评估c第一,然后a << b,同样,它可以评估b其评估之前a.事实上,它甚至可以评估的顺序方面b→交通c→交通a如果它想,它只是可能,如果它的结论是这样的订单将通过减少流水线停顿,高速缓存未命中,等等最大限度地提高性能