簡體   English   中英

C 中三元運算符的求值順序

[英]Order of evaluation for ternary operator in C

我知道根據標准, fun(++a, a)應該避免,因為第二個參數沒有很好地定義。

但是,這種配方是否安全:

(++a ? a : 10);

我測試了這個片段,它按預期工作,對於a = -1它評估為10 ,對於任何其他a它評估為a+1 這是在標准中明確定義的,還是強烈依賴於編譯器?

這是很好定義的。

在三元表達式中,首先計算第一部分。 然后根據該值,評估第二部分第三部分。 所以++a保證在a可能被評估之前被評估。

C 標准的第 6.5.15p4 節對此進行了解釋:

評估第一個操作數; 在它的求值和第二個或第三個操作數的求值之間有一個序列點(以求值者為准) 僅當第一個比較不等於 0 時才計算第二個操作數; 僅當第一個比較等於 0 時才評估第三個操作數; 結果是第二個或第三個操作數的值(以評估的為准),轉換為下面描述的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM