簡體   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