C 程式設計中逗號運算子和條件運算子的使用方法講解

2022-10-04 02:06:10 字數 1400 閱讀 6386

逗號運算子:,

允許對兩個語句進行分組,其中有乙個是預期的。

expression , expression

備註逗號運算子具有從左向右的關聯性。 由逗號程式設計客棧分隔的兩個表示式將從左向右進行計算。 始終計算左運算元,並且在計算右運算元之前將完成所有***。

在某些上下文(如函式引數列表)中,逗號可用作分隔符。 不要將該逗號用作分隔符與將其用作運算子的情況xuywnotz混淆;這兩種用法完全不同。

考慮表示式

e1 , e2

該表示式的型別和值是 e2 的型別和值;e1 的計算結果將被丟棄。 如果右運算元是左值,則結果為左值。

在通常將逗號用作分隔符的方案中(例如,在函式或聚合初始值設定項的實參程式設計客棧中),逗號運算子及其運算元必須包含在括號中。 例如:

func_one( x, y + 2, z );

func_two( (x--, y + 2) z );

在上面的對 func_one 的函式呼叫中,會傳遞以逗號分隔的三個引數:x、y + 2 和 z。 在對 func_two 的函式呼叫中,圓括號強制編譯器將第乙個逗號解釋為順序計算運算子。 此函式呼叫將兩個引數傳遞給 func_two。 第乙個引數是順序計算運算 (x--, y + 2) 的結果,具有表示式 y + 2 的值和型別;第二個引數為 z。

示例// cpp_comma_operator.cpp

#include

int main ()

2030

條件運算子:? :

語法expression ? expression : expression

備註條件運算子 (? :) 是乙個三元運算子(採用三個運算元)。條件運算子按以下方式執行:

第乙個運算元隱式轉換為 bool。計算該運算元,並在繼續前完成所有***。

前面列表中沒有的第二個和第三個運算元的任意組合都是非法的。結果的型別是通用型別,如果第二個和第三個運算元是同一型別且都是左值,則結果為左值。

system_caps_warning警告

如果第二個和第三個運算元的型別不相同,則會按 c++ 標準中的指定呼叫複雜型別轉換規則。這些轉換可能會導致意外行為,包括構造和析構臨時物件。為此,我們強烈建議:(1) 避免將使用者定義的型別用作帶條件運算子的運算元;(2) 如果確實要使用使用者定義的型別,務必將每個運算元顯式轉換為通用型別。

// expre_expressions_with_the_conditional_operator.cpp

// compile with: /ehsc

// demonstrate conditional operator

#include

using namespace std;

int main()

本文標題: c++程式設計中逗號運算子和條件運算子的使用方法講解

本文位址:

條件運算子和逗號運算子

條件運算子 表示式1 表示式2 表示式3 運算規劃 如果表示式1為真,返回表示式2的結果,否則返回表示式3的結果 例如 a 1,b 2 a b a b 返回值為2 注意表示式是右結合的.例 a 1,b 2,c 3 a b a b?c b 相當於 a b a b?c b 返回值為3 逗號運算子 多個表...

位運算子,「,」逗號運算子,

位運算子有 按位與 按位或 按位異或 按位取反 優先順序從高到低,依次為 按位與運算有兩種典型用法,一是取乙個位串資訊的某幾位,如以下 擷取x的最低7位 x 0177。二是讓某變數保留某幾位,其餘位置0,如以下 讓x只保留最低6位 x x 077。按位或運算的典型用法是將乙個位串資訊的某幾位置為1。...

C 逗號運算子

exp1,exp2,exp3,expn 運算子中每個表示式exp i 都會被計算,且整個逗號表示式的最終結果為最後乙個表示式expn的值。include include int main return exit success 最終輸出結果 ok。while中含有的條件判別式是乙個逗號表示式。系統首...