int n = a?2:3

a為真則n=2,否則等於3

「?:分開沒有特別的意思」反而是作為整體有更廣泛的意思,具體可搜索c語言三段式


三目運算符可以視為一種分支,但是它與「if」語句的初衷是完全不同的。這在於它是表達式,甚至是有值的表達式,可以被賦值,可以被使用等等;而「if」是不可能有任何值的,只是單純的邏輯分支。

首先雙目運算符標準格式應該是這樣的:

條件 ? 可能一 : 可能二

三目運算符所做的就是,判斷條件是「真」還是「假」,然後把「可能一」或「可能二」作為自己整體的值。其中條件、可能一、可能二,都可以是表達式。

三目運算符帶來的是有值的表達式,只有它的值需要被使用時,我們才應該使用它。也就是說其用法絕對不是簡單地代替「if」,比如:

if (x &< 0) y = 20; else z = 30;

不需要也不應該替換為如下代碼,雖然它語法正確:

x &< 0 ? y = 10 : z = 20;

只有當我們需要用到它的值時,才應當使用,比如:

r = x &< 0 ? y = 10 : z = 20

這是比較極端的例子,一般來說,我們不會在雙目運算中做賦值,因為這樣做很難看(注意是雙目運算中一般不做賦值,而不是整個表達式的結果不賦值給其他東西)。常見的是嵌套三目運算、調用方法、或者直接就是一個值,如:

y = x &> 0 ? x + 2 : 1

首先左邊的賦值號優先順序最低,其左側先不看,看右邊這個:

x &> 0 ? x + 2 : 1

計算三目,首先看「x &> 0」為真與否,那麼我們第一步計算的是「&>」。若為真,我們要取「x + 2」作為我們的整體的值,這時候我們要計算「+」,算出某個值,比如是「20」好了,「20」就被作為整個表達式的值,下一步即為「y = 20」,完成此行;若為假,則「1」將作為整個表達式的值,做「y = 1」。

當然這樣的也是語法上允許的:

r = x &< 0 ? y = 10 : z = 20

可以自己分析一下試試看有沒有理解。其中可能不太想得到的一點就是「=」也是有值的,比如「y = 10」除了把「y」改成「10」,還會把「10」作為「y = 10」這一塊的值。就好比「a = b = 1」,其實是做「b = 1」,賦值了「b」,又把「1」作為這塊的值,然後就能做「a = 1」。

另外,其實三目運算符是與雙目運算符、單目運算符對應的概念,指的是有三個操作數的運算符,應該是指代一類運算符的,但由於C++只有這一種三目運算符,所以一般就直接叫它三目運算符了。


這是「三目運算符」,是if-else語句的簡寫方法。

// 表達式1 ? 表達式2 : 表達式3 ;
x &< 0 ? y = 10 : z = 20; // 等價於 if (x &< 0) y = 10; else z = 20;

表達式1 ? 表達式2 : 表達式3 ;

  • 表達式1是測試的條件。
  • 表達式2是如果條件為true則被執行。
  • 表達式3是如果條件為false則被執行。

以上


if-else 條件分支,用於條件執行。

即:根據不同的條件,執行不同的代碼。

?:三目運算符,用於條件求值。

即:根據不同的條件,返回不同的值。

偽代碼:

變數 = 表達式1 ? 值1 :

表達式2 ?值2 : 表達式3 ?值3 : 表達式4 ?值4 : 表達式5 ?值5 :值6;


這個是三目運算符

JAVA C C++的三目運算符都是一樣的

?:代表的就是 if else語句

if(3>2)

x=10

else

x=0

可寫作3>2?x=10:x=0


C/C++ 的三目運算符,某些時候比if else更簡潔,方便


推薦閱讀:
相關文章