C++ primer中4.33練習逗號運算符的理解

今天在做primer的練習,發現一個問題,書上4.33練習的題目如下:

說明下面這個表達式的意義:

<pre name="code" class="cpp">someValue?++x,++y:--x,--y;


在CLion下編輯實驗如下:

/**
 * test 4.33
 * 逗號運算符的效果
 */
#include <iostream>

using namespace std;
int main()
{
    int x = 10;
    int y = 20;
    //part 1
    bool someValue = true;
    someValue?++x,++y:--x,--y;
    cout << x << " " << y << " " << someValue << endl;
    //part 2
    someValue = false; x = 10;y = 20;
    someValue?++x,++y:--x,--y;
    cout << x << " " << y << " " << someValue << endl;
    return 0;
}

最後的運行結果如下:

11 20 1
9 19 0

所以,意味着,someValue爲true時,並不是簡單的運行了++x,++y,那究竟是如何運算的呢?

回過頭看編譯器,其實clion已經有了提示:


這裏因爲someValue的值是確定的,所以clion提示warning,並且以灰色來標註肯定不會運行的部分,與此對應,someValue爲false時:


可以看到無論someValue的值怎麼變,--y是肯定運算的,查閱書籍後,原因如下:

逗號運算符的優先級是最低的,主要作用是將幾個算式並列並返回最右邊的算式的結果,在剛纔的表達式中,在編譯器的眼中,真實的運算順序爲

(someValue?++x,++y:--x),--y;
故,--y被認爲是一個獨立的表達式,要改變這一情況,在表達式附近加上括號區分即可。

有關逗號運算符的更多信息與實驗,可以看這篇博客:

http://www.cnblogs.com/hnrainll/archive/2011/08/03/2126660.html

發佈了41 篇原創文章 · 獲贊 33 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章