C++ 链式调用中的求值顺序

2024-06-20

假设我们有课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() and func4()定义?

根据这个答案未定义的行为和序列点 https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points序列点之一是:

  • 在函数调用时(无论该函数是否内联),在评估所有函数参数(如果有)之后 在执行函数体中的任何表达式或语句之前发生(§1.9/17).

那么“评估所有函数参数”的意思是,func3()必须之前调用func4()作为评价func1()参数必须在调用之前发生func2()?


其要点是在函数调用中,X(Y, Z);对所有的评价X, Y, Z彼此之间的顺序不确定。唯一的顺序是Y and Z are 之前测序对函数的调用X评价为.

假设我们有:

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

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

三大功能a, b, c可以按任何顺序调用。当然,这一切都递归地适用于任何子表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 链式调用中的求值顺序 的相关文章

随机推荐