簡體   English   中英

有人可以解釋這種C / C ++語法嗎?

[英]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 xy一個左值 在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;
}

您可以根據條件分配給xy

看起來像是選擇左值的三元運算符。 我不知道可以做到這一點,但我想這很有意義。 根據條件,兩個值(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.

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