2015-06-06 18 views
0

預減操作我有兩個代碼,如下所示:後減和在C++

#include <iostream> 
int main() { 
    int a = 4; 
    if (a == a--){ 
     std::cout << a << std::endl; 
     std::cout << "HELLO"<<std::endl; 
    } 
    std::cout << a << std::endl; 
    return 0; 
} 

輸出是:3

,爲此:

#include <iostream> 
int main() { 
    int a = 4; 
    if (a == --a){ 
     std::cout << a << std::endl; 
     std::cout << "HELLO"<<std::endl; 
    } 
    std::cout << a << std::endl; 
    return 0; 
} 

輸出是:

3 
HELLO 
3 

根據C++ operator precedence,增量和減量運算符(用於前綴和後綴)位於關係運算符==之前。那麼兩者的預期產出應該是相同的(預計這兩者都是:3),但事實上並非如此。

任何幫助?此外,如果上述情況導致未定義的行爲,那麼請解釋原因。

回答

2

運算符優先級說明如何解析表達式(加上括號),而不是評估順序。

因此--a == b被有效解析爲(--a) == b而不是--(a == b)

+1

...或處理順序點的方式。 –