簡體   English   中英

cout內函數調用的順序

[英]order of function call inside cout

我試圖了解cout語句中函數執行的順序

我嘗試了這組代碼

#include < iostream >
using namespace std;
int i=0;
int sum(int a)
{
    i++;
    return a+i;
}
int main()
{
    cout << sum(3) << sum(2) ;
    return 0;
}

“我預計輸出為44,但實際輸出為53”

如上所述: https//en.cppreference.com/w/cpp/language/eval_order

任何表達式的任何部分的評估順序,包括函數參數的評估順序都未指定(下面列出了一些例外)。 編譯器可以按任何順序計算操作數和其他子表達式,並且可以在再次計算同一表達式時選擇另一個順序。

在C ++中沒有從左到右或從右到左評估的概念。 這不應與運算符的從左到右和從右到左的關聯性混淆:表達式a()+ b()+ c()被解析為(a()+ b())+ c( )由於operator +的從左到右的關聯性,但是對c的函數調用可以在運行時的第一個,最后一個或()或b()之間進行評估

在你的行

cout << sum(3) << sum(2)

兩者的順序operator<<來電取決於您使用運營商(這里<<所以左到右),但每個子表達式的評價,即sum(3)sum(2)沒有確定的順序取決於關於編譯器的情緒(通常是最優化的編譯方法)。

有關信息,請參閱運營商關聯性列表: https//en.cppreference.com/w/cpp/language/operator_precedence

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM