[英]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.