逗號運算符和逗號表達式


title: 逗號運算符和逗號表達式
date: 2016-06-07 10:36:15
categories: C++
tags:
- C
- C++
- C++小結


逗號運算符和逗號表達式

逗號運算符

逗號運算符是以逗號爲分隔符的列表中最後一個表達式的值。
本質上講,逗號的作用是導致一系列運算都被順序執行。

最右邊的那個表達式的值將作爲整個逗號表達式的值,其他的表達式的值將會被丟棄。

逗號運算符是所有運算符中級別最低的。

例如,有如下表達式:

var = (count = 19, incr = 10, count + 1);

上式在計算時,首先將count的值賦給19,將10賦值給incr,然後在最後一個表達式中,將最右邊的count+1的計算結果20賦給var。
上面表達式中的括號是必須得,因爲逗號運算符的優先級低於賦值操作符。

例如,有如下例子:

#include<iostream>

using std::cout;

int main()
{
    int i, j;

    j = 10;
    i = (j ++, j + 100, 999 + j);

    cout << i;
    return 0;
}

當上面的代碼被編譯和執行時,其結果爲:

1010

逗號表達式

逗號表達式是一種特殊的運算符,它可以將兩個表達式連接起來。
如: 3 + 5,6 + 8
這種類型的運算符成爲逗號表達式,又稱爲“順序求值運算符”。
逗號表達式的一般形式是:
表達式1,表達式2

求解順序是:先求解表達式1,再求解表達式2.整個逗號表達式的值時表達式2的值。
比如上式例子中表達式3 + 5,6 + 8的值是14.

又如,逗號表達式
a = 3 * 5, a * 4

對該表達式,可能會有兩種解讀。

  • 一種認爲,等號右邊的3 * 5,a * 4是一個逗號表達式,先求出此逗號表達式的值,在將逗號運算符的值賦給a。比如如果a的原值是3,則逗號表達式的值爲12,將12賦值給a,因此最後a的值爲12.
  • 另一種認爲,a = 3 * 5是一個賦值表達式,a * 4是另一個表達式,二者用逗號相連,構成一個逗號表達式。

這兩種看法哪種正確呢?

其實,賦值運算符的優先級高於逗號運算符的優先級,因此應該首先求解a = 3 * 5,此時a的值爲15,然後再求解a*4,得60.
整個逗號表達式的值爲60.

因此,逗號表達式的一般形式可以擴展爲:

表達式1,表達式2,表達式3,......表達式n

它的值爲表達式n的值。

參考文章

  1. 菜鳥教程——C++逗號運算符
  2. C語言中逗號運算符和逗號表達式——秋水ThinKing的博客
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章