[英]Order of evaluation in chain invocation in C++
假设我们有A
级:
class A {
public:
A& func1( int ) { return *this; }
A& func2( int ) { return *this; }
};
和2个立场功能:
int func3();
int func4();
现在在这段代码中:
A a;
a.func1( func3() ).func2( func4() );
函数func3()
和func4()
的评估顺序是什么?
根据这个答案未定义的行为和序列点之一的序列点是:
§1.9/17
)中执行任何表达式或语句之前评估所有函数参数(如果有)之后,在函数调用(函数是否内联)之后。 那么“评估所有函数参数”的意思是, func3()
必须在func4()
之前调用,因为func1()
参数的评估必须在调用func2()
之前进行?
它的要点是在函数调用中, X(Y, Z)
; 所有X
, Y
, Z
评估相对于彼此不确定地排序。 唯一的排序是在调用X
评估的函数之前对Y
和Z
进行排序 。
假设我们有:
typedef void (*fptr)(int, double);
fptr a();
int b();
double c();
a()(b(), c());
可以以任何顺序调用三个函数a
, b
, c
。 当然,这一切都以递归方式应用于任何子表达式。
不,func3和func4可以按任何顺序进行评估(但不进行交错)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.