第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C和C ++之間的條件運算符差異

C和C ++之間的條件運算符差異

C++ C
慕碼人8056858 2019-11-15 10:50:59
我在某處讀到?:,C 中的運算符在C ++中略有不同,有些源代碼在兩種語言中的工作方式有所不同。不幸的是,我在任何地方都找不到文字。有誰知道這是什么區(qū)別?
查看完整描述

3 回答

?
烙印99

TA貢獻1829條經(jīng)驗 獲得超13個贊

C ++中的條件運算符可以返回左值,而C不允許類似的功能。因此,以下內(nèi)容在C ++中是合法的:


(true ? a : b) = 1;

要在C中復制此代碼,您將不得不訴諸if / else或直接處理引用:


*(true ? &a : &b) = 1;

此外,在C ++,?:和=運營商有相同的優(yōu)先級和組從右到左,使得:


(true ? a = 1 : b = 2);

是有效的C ++代碼,但會在C中拋出一個錯誤,并且在最后一個表達式周圍沒有括號:


(true ? a = 1 : (b = 2));


查看完整回答
反對 回復 2019-11-15
?
慕村225694

TA貢獻1880條經(jīng)驗 獲得超4個贊

實際的主要區(qū)別在于,在C中,對?:的求值永遠不會像在C ++中那樣導致l值。


它的定義還有其他差異,幾乎沒有實際意義。在C ++中,第一個操作數(shù)轉(zhuǎn)換為布爾值,在C中,它與0進行比較。這類似于C和C ++之間的==,!=等定義上的差異。


C ++中還存在更復雜的規(guī)則,用于根據(jù)第二和第三操作數(shù)的類型推導?:表達式的類型。這反映了C ++中用戶定義的隱式轉(zhuǎn)換的可能性。


示例代碼。有效的C ++; 無效的C.


extern int h(int p, int q);


int g(int x)

{

        int a = 3, b = 5;


        (x ? a : b) = 7;


        return h( a, b );

}

gcc 生成為C時會生成錯誤:“錯誤:賦值中的無效左值”,但編譯為C ++時,代碼將正確編譯。


編輯: 盡管?:不能在C中返回l值,也許令人驚訝的是?:的語法是:


conditional-expression:

    logical-OR-expression

    logical-OR-expression ? expression : conditional-expression

這意味著即使(由于“不是l值”規(guī)則)a ? b : c = d解析(a ? b : c) = d也不會導致有效的表達式。


C ++將語法更改為此:


conditional-expression:

    logical-or-expression

    logical-or-expression ? expression : assignment-expression

盡管在某些情況下允許條件表達式為l值的擴展名在a ? b : c = d沒有語法更改的情況下就有效,但新的語法更改意味著表達式現(xiàn)在有效,但含義不同a ? b : (c = d)。


盡管我沒有任何證據(jù),但是我認為隨著語法的變化不會破壞與現(xiàn)有C代碼的兼容性,因此新語法更有可能使諸如以下的表達式產(chǎn)生更少的驚喜:


make_zero ? z = 0 : z = 1;


查看完整回答
反對 回復 2019-11-15
?
溫溫醬

TA貢獻1752條經(jīng)驗 獲得超4個贊

C解析的部分不正確。在C語法中,=運算符的LHS 不能包含非括號?:運算符。建議的(a ? b : c) = d解析實際上是不可能的。在C語言中,語法a ? b : c = d表達根本無法解析。任何解釋它的編譯器都會(a ? b : c) = d自擔風險。(在試圖統(tǒng)一C和C ++語法的混合C / C ++編譯器中,通常是這種情況。)形式上,這沒有問題,因為仍然會拒絕無效代碼。但是,“不是左值”消息具有誤導性。

查看完整回答
反對 回復 2019-11-15
  • 3 回答
  • 0 關(guān)注
  • 585 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號