三目運算子「 」省略中間運算元

2021-08-11 04:08:52 字數 728 閱讀 4196

在使用三目運算子的時候,我們經常見到的是:

x ? x : y

就是if else的簡寫

如果x為真,就返回x,如果x為假,就返回y。這是最簡單最基本的用法。

但是有時候會看到這種用法

x ?: y

?與:之間沒有任何運算元,這是什麼用法呢?

在通過幾個例項的實驗後,猜測?與:之間省略了x

也就是說x ? : y  就是 x ? x : y

這樣就可以講的通了。

那麼形如 a > b ?: b 中間省略了什麼呢,是a嗎

驗證之後發現並不是a

其實省略了 a > b

也就是說 a > b ?: b 等價於 a > b ? a > b : b

那麼可以這樣下結論:「?:」 中間省略的東東是與 「?」之前的數或者表示式完全一致。

值得注意的是:在某種情況下,還是會有出入的

譬如 y = ++x ? ++x : 3  與 y = ++x ?: 3

輸出的y的結果是不一樣的,這是為什麼呢?

當x的初始值為0時,第一種寫法的輸出y的結果為2 ,而第二種寫法的輸出y的結果為1

說明第一種寫法輸出的是執行了兩次++操作的結果,而第二種寫法只執行了一次++操作

所以當有++或--運算的時候,要根據需要判斷要不要省略,不能貿然省去,從而引起不必要的錯誤

其實這種省略方式還是挺好的,特別是**長度比較長的時候,可以在滿足要求的前提下簡化**

三目運算子「 」省略中間運算元

在使用三目運算子的時候,我們經常見到的是 x x y 就是if else的簡寫 如果x為真,就返回x,如果x為假,就返回y。這是最簡單最基本的用法。但是有時候會看到這種用法 x y 與 之間沒有任何運算元,這是什麼用法呢?在通過幾個例項的實驗後,猜測?與 之間省略了x 也就是說x y 就是 x x ...

三目運算子之「? 」間省略運算元

最近在看gpio驅動框架中關於label屬性的show方法函式時遇到了三目運算子 省略運算元的情況,因為不多見在此記錄下,不多說直接貼 static ssize t chip label show struct device dev,struct device attribute attr,char...

三目運算子

1 概念 根據不同的條件,執行不同的操作 返回不同的值。條件1?值1 或操作1 如果滿足條件 1,就返回值 1或執行操作1 條件2?值2 或操作2 否則,如果滿足條件 2,就返回值 2或執行操作2 總結 表示式 閏年 平年 多種條件 條件 1?值1 條件2?值 值3例子 1 輸入星期四 就輸出 班級...