條件運算子巢狀

2021-07-04 11:27:19 字數 648 閱讀 9249

條件運算子(?:)都知道就不細說了,最簡單也是最常用的例子:n = (a > b) ? a : b;

在c++ primer plus第六版180頁看到了乙個例子,如下所示:

const char x[2] [20] =

const char * y = "quillstone";

for(int i = 0; i <3; i++)

cout<<((i < 2)? !i ? x[i] : y : x[1]);

列印結果為:

jason quillstone at your services

乍一看有點愣住,但仔細看就會發現,原表示式的意思是(i < 2)? (!i ? x[i] : y) : x[1],再對照結果一看,印證了我的想法。在網上找到的例子中還有各種眼花繚亂的巢狀用法,但只要找到每個(?:)運算子應該是怎麼配對的,就很容易理解了。

還有一點,該書中說這個技巧完成了乙個應被譴責的任務——隱藏**,書中沒有解釋,網上也沒有相關的資料。那這個條件運算子的**隱藏體現在什麼地方呢?我的理解就是:1、隱藏了一對圓括號。2、將**縮短了,使得其難於理解。

說了這麼多,然而這個條件運算子巢狀並沒有什麼卵用。最常用的就那種最簡單的形式,巢狀的越多**越難於閱讀和理解,這時候使用 if else 語句來表達會更為清晰。

條件運算子的巢狀問題

第乙個程式段 include intmain 輸出結果2342 對於k a a?a c b?b c 這個是巢狀。從右向左看條件運算子,乙個乙個看。對於 a a?a c b?b c 可以轉換為if else語句 if aif aelse k c else if bk b else k c 第二個程式段...

條件運算子

條件運算子 c提供條件表示式 conditional expression 作為表達if else語句的便捷方式,該表示式使用?條件運算子。該運算子分為兩個部分,需要三個運算物件。所以是三元運算子,也是c唯一的三元運算子 下面的 得到乙個數的絕對值 x y 0 y y 在 和 之間的內容就是條件表示...

條件運算子和逗號運算子

條件運算子 表示式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 逗號運算子 多個表...