繁体   English   中英

C ++中链调用的评估顺序

[英]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) ; 所有XYZ评估相对于彼此不确定地排序。 唯一的排序是在调用X评估的函数之前YZ进行排序

假设我们有:

typedef void (*fptr)(int, double);
fptr a();
int b();
double c();

a()(b(), c());

可以以任何顺序调用三个函数abc 当然,这一切都以递归方式应用于任何子表达式。

不,func3和func4可以按任何顺序进行评估(但不进行交错)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM