簡體   English   中英

運算符優先級在C ++中的行為不正常

[英]Operator precedence doesn't behave as expected in c++

考慮以下代碼:

int func1()
{
    cout<<"Plus"<<endl;
    return 1;
}
int func2()
{
   cout<<"Multiplication"<<endl;
   return 2;
}
int main()
{
  cout<<func1()+4*func2();
}

根據此頁面, *運算符的優先級高於+運算符,因此我希望結果是:

Multiplication 
Plus
9

但是結果是

Plus 
Multipication
9

!! 編譯器解析器中發生了什么? 編譯器是否喜歡運算符關聯? 所有c / c ++編譯器的輸出是否相同?

運算符優先級與求值順序不同。

您無法保證求值的順序-編譯器可以隨意在表達式中以任意順序調用函數,只要您獲得正確的結果即可。

(一個次要條件:任何引入序列點的東西(包括短路算子)都會影響求值順序,但是在這種情況下表達式中沒有序列點。)

編譯器可以隨意按任意順序評估函數-表達式中唯一保證評估順序的情況是順序點; 運營商|| &&,? 三元條件運算符? : ? :是序列點。 在每種情況下,觸摸左側之前都要評估左側的所有值和副作用。

暫無
暫無

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

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