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
的值。