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