[英]Can someone explain this C/C++ syntax?
Sombody可以解釋這是如何工作的嗎?
int x, y;
....
(some_condition ? x : y) = 100;
這是要工作還是僅僅是“盲目的”翻譯或編譯器(類似於vec[10]
等於10[vec]
)?
這是有效的C ++和無效的C。
根據some_condition
是否為true
,條件表達式的結果可以是C(在這種情況下是)在C ++中some_condition
x
或y
一個左值 。 在C ++中,如果在轉換為bool
時some_condition為true
,則將x
分配為值100,否則將y
分配為100。
在C語言中,條件表達式的結果永遠不會是左值 ,也無法分配給它。
至少在C ++中,該代碼段基本上與此等效:
if(some_condition)
{
x = 100;
}
else
{
y = 100;
}
盡管您必須仔細閱讀相關章節,但C ++標准對此有保證。 運算符的規則出奇地復雜(主要是由於執行了類型轉換),因此條件運算符和if-then-else語句並非始終都完全相等。
但是,在上面的代碼段中,標准中的這一段是相關的:
5.16 / 4條件運算符:
如果第二和第三操作數是左值並且具有相同的類型,則結果是該類型並且是左值。
它是一個表達式,其結果與此代碼相同:
if (some_condition)
x = 100;
else
y = 100;
x和y都是相同類型的左值。 我認為這段代碼中沒有盲目之處。 但是您可能會發現某些編譯器無法編譯此代碼。
我通常更喜歡使用if / else代碼,它們產生完全相同的代碼,並且對於維護人員而言可讀性更高。 而且,如果您想跟蹤錯誤,可以更輕松地將每個分支放在單獨的分支上,設置斷點也更容易。
代碼覆蓋率控制也更容易檢查。
如果x和y是l值,則三元表達式是l值。
在這里討論
不,這是if條件的縮寫。 它像是
if(somecondition)
{
x = 100;
}
else
{
y = 100;
}
您可以根據條件分配給x
或y
。
看起來像是選擇左值的三元運算符。 我不知道可以做到這一點,但我想這很有意義。 根據條件,兩個值(x或y)之一將被分配為100。
如果可行,那就太酷了!
它旨在工作。
如果三元運算符?:的兩個可能結果均為左值,則可以生成左值(即您可以分配給它的值),如您的示例中所示。
因此,您的示例根據其他一些值將值分配給x或y。
x或y的值替換為100取決於條件。 通常在返回時也使用-
return condition ? x : y ; // If condition is true => return x else return y
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.