Sla*_*ica 7 c++ operator-precedence
假设我们上课了A:
class A {
public:
A& func1( int ) { return *this; }
A& func2( int ) { return *this; }
};
Run Code Online (Sandbox Code Playgroud)
和2个立场功能:
int func3();
int func4();
Run Code Online (Sandbox Code Playgroud)
现在在这段代码中:
A a;
a.func1( func3() ).func2( func4() );
Run Code Online (Sandbox Code Playgroud)
是功能评估的顺序func3()和func4()定义?
根据这个答案未定义的行为和序列点之一的序列点是:
§1.9/17)中执行任何表达式或语句之前发生的所有函数参数(如果有)的评估之后,在函数调用(函数是否为内联函数)之后.那么"所有函数参数的评估"是什么意思,func3()必须先调用,func4()因为func1()参数的评估必须在调用之前发生func2()?
它的要点是在函数调用中X(Y, Z); 所有的评价X,Y,Z是不定相对于彼此测序.唯一的排序是Y和Z被测序,之前调用该函数X评价.
假设我们有:
typedef void (*fptr)(int, double);
fptr a();
int b();
double c();
a()(b(), c());
Run Code Online (Sandbox Code Playgroud)
这三个功能a,b,c可以以任意顺序进行调用.当然,这一切都以递归方式应用于任何子表达式.