C++編程中逗號運算符和條件運算符的使用方法講解
逗號運算符:,
允許對兩個語句進行分組,其中有一個是預(yù)期的。
expression , expression
備注
逗號運算符具有從左向右的關(guān)聯(lián)性。 由逗號分隔的兩個表達式將從左向右進行計算。 始終計算左操作數(shù),并且在計算右操作數(shù)之前將完成所有副作用。
在某些上下文(如函數(shù)參數(shù)列表)中,逗號可用作分隔符。 不要將該逗號用作分隔符與將其用作運算符的情況混淆;這兩種用法完全不同。
考慮表達式
e1 , e2
該表達式的類型和值是 e2 的類型和值;e1 的計算結(jié)果將被丟棄。 如果右操作數(shù)是左值,則結(jié)果為左值。
在通常將逗號用作分隔符的方案中(例如,在函數(shù)或聚合初始值設(shè)定項的實參中),逗號運算符及其操作數(shù)必須包含在括號中。 例如:
func_one( x, y + 2, z ); func_two( (x--, y + 2), z );
在上面的對 func_one 的函數(shù)調(diào)用中,會傳遞以逗號分隔的三個參數(shù):x、y + 2 和 z。 在對 func_two 的函數(shù)調(diào)用中,圓括號強制編譯器將第一個逗號解釋為順序計算運算符。 此函數(shù)調(diào)用將兩個參數(shù)傳遞給 func_two。 第一個參數(shù)是順序計算運算 (x--, y + 2) 的結(jié)果,具有表達式 y + 2 的值和類型;第二個參數(shù)為 z。
示例
// cpp_comma_operator.cpp #include <stdio.h> int main () { int i = 10, b = 20, c= 30; i = b, c; printf("%i\n", i); i = (b, c); printf("%i\n", i); }
20 30
條件運算符:? :
語法
expression ? expression : expression
備注
條件運算符 (? :) 是一個三元運算符(采用三個操作數(shù))。條件運算符按以下方式運行:
第一個操作數(shù)隱式轉(zhuǎn)換為 bool。計算該操作數(shù),并在繼續(xù)前完成所有副作用。
- 如果第一個操作數(shù)的計算結(jié)果為 true (1),則計算第二個操作數(shù)。
- 如果第一個操作數(shù)的計算結(jié)果為 false (0),則計算第三個操作數(shù)。
- 條件運算符的結(jié)果是操作數(shù)(無論是第二個還是第三個)的計算結(jié)果。只有最后兩個操作數(shù)之一在條件表達式中計算。
- 條件表達式具有從右到左的關(guān)聯(lián)性。第一個操作數(shù)必須是整數(shù)或指針類型。以下規(guī)則適用于第二個和第三個操作數(shù):
- 如果兩個操作數(shù)是相同的類型,則結(jié)果也是該類型。
- 如果兩個操作數(shù)都是算術(shù)或枚舉類型,則執(zhí)行常用算術(shù)轉(zhuǎn)換(在算術(shù)轉(zhuǎn)換中有述)來將它們轉(zhuǎn)換為通用類型。
- 如果兩個操作數(shù)都是指針類型,或者一個是指針類型,另一個是計算結(jié)果為 0 的常量表達式,則執(zhí)行指針轉(zhuǎn)換來將它們轉(zhuǎn)換為通用類型。
- 如果兩個操作數(shù)都是引用類型,則執(zhí)行引用轉(zhuǎn)換來將它們轉(zhuǎn)換為通用類型。
- 如果兩個操作數(shù)都是 void 類型,則通用類型是 void 類型。
- 如果兩個操作數(shù)是相同的用戶定義類型,則通用類型也是該類型。
- 如果操作數(shù)是不同的類型,而且至少有一個操作數(shù)是用戶定義類型,則使用語言規(guī)則來確定通用類型。(請參閱下面的警告。)
前面列表中沒有的第二個和第三個操作數(shù)的任意組合都是非法的。結(jié)果的類型是通用類型,如果第二個和第三個操作數(shù)是同一類型且都是左值,則結(jié)果為左值。
System_CAPS_warning警告
如果第二個和第三個操作數(shù)的類型不相同,則會按 C++ 標準中的指定調(diào)用復(fù)雜類型轉(zhuǎn)換規(guī)則。這些轉(zhuǎn)換可能會導(dǎo)致意外行為,包括構(gòu)造和析構(gòu)臨時對象。為此,我們強烈建議:(1) 避免將用戶定義的類型用作帶條件運算符的操作數(shù);(2) 如果確實要使用用戶定義的類型,務(wù)必將每個操作數(shù)顯式轉(zhuǎn)換為通用類型。
// expre_Expressions_with_the_Conditional_Operator.cpp // compile with: /EHsc // Demonstrate conditional operator #include <iostream> using namespace std; int main() { int i = 1, j = 2; cout << ( i > j ? i : j ) << " is greater." << endl; }
欄 目:C語言
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2573.html
您可能感興趣的文章
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言沒有round函數(shù) round c語言
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實現(xiàn)全排列算法的方法詳解
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解
- 01-10APUE筆記之:進程環(huán)境詳解
- 01-10c++中inline的用法分析
- 01-10如何尋找數(shù)組中的第二大數(shù)


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10C#中split用法實例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改