3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是GNU C擴(kuò)展名(請(qǐng)參閱?:Wikipedia entry),因此為了可移植性,您應(yīng)明確聲明第二個(gè)操作數(shù)。
在“ true”的情況下,它將返回條件的結(jié)果。
以下語(yǔ)句幾乎是等效的:
a = x ?: y;
a = x ? x : y;
唯一的區(qū)別是第一個(gè)語(yǔ)句x始終被評(píng)估一次,而第二個(gè)語(yǔ)句x如果為真則將被評(píng)估兩次。因此,唯一的區(qū)別是評(píng)估x有副作用。
無(wú)論哪種方式,我都認(rèn)為這是語(yǔ)法的微妙用法……如果您對(duì)那些維護(hù)代碼的人有同理心,則應(yīng)該明確聲明操作數(shù)。:)
另一方面,對(duì)于常見(jiàn)的用例來(lái)說(shuō),這是一個(gè)不錯(cuò)的小技巧。

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
這是C語(yǔ)言的GCC擴(kuò)展。如果之間沒(méi)有任何顯示?:,則在真實(shí)情況下使用比較的值。
條件表達(dá)式中的中間操作數(shù)可以省略。然后,如果第一個(gè)操作數(shù)不為零,則其值為條件表達(dá)式的值。
因此,表達(dá)
x ? : y
如果x的值非零,則為x;否則,y的值。
這個(gè)例子完全相當(dāng)于
x ? x : y
在這種簡(jiǎn)單情況下,忽略中間操作數(shù)的功能不是特別有用。當(dāng)?shù)谝粋€(gè)操作數(shù)確實(shí)有用或可能(如果它是宏參數(shù))包含副作用時(shí),它才變得有用。然后在中間重復(fù)操作數(shù)將產(chǎn)生兩次副作用。省略中間操作數(shù)將使用已經(jīng)計(jì)算的值,而不會(huì)產(chǎn)生重新計(jì)算該值的不良影響。
添加回答
舉報(bào)