sombody可以解釋這是如何工作的嗎?有人可以解釋這個C/C++語法嗎?
int x, y;
....
(some_condition ? x : y) = 100;
是這個意圖工作,或者僅僅是一個「盲」的翻譯或編譯器(類似vec[10]
等於10[vec]
)?
sombody可以解釋這是如何工作的嗎?有人可以解釋這個C/C++語法嗎?
int x, y;
....
(some_condition ? x : y) = 100;
是這個意圖工作,或者僅僅是一個「盲」的翻譯或編譯器(類似vec[10]
等於10[vec]
)?
這是有效的C++和無效C.
條件表達式的結果可以是(在這種情況下是)的左值在 C++指的取決於some_condition
是否評估爲true
的x
一個或y
。在C++中任一x
的值指定爲100,如果當轉換爲一個bool
some_condition是true
,否則y
被分配100
在C,條件表達式的結果是不講左值並且不能被分配給。
根據情況分配給x
或y
。
至少在C++,該代碼段基本上是相同的:
if(some_condition)
{
x = 100;
}
else
{
y = 100;
}
它是由C++標準保證的,但你必須仔細閱讀相關章節。運算符的規則非常複雜(主要是由於執行了類型轉換),所以條件運算符和if-then-else語句並不總是完全相同。
然而,在你上面的代碼段,這一段的標準是相關的:
5.16/4條件運算符:
如果第二個和第三個操作數是左值和具有相同的類型,結果是這種類型,是一個左值。
它看起來像一個選擇左值的三元運算符。我不知道這可以做到,但我認爲這很有道理。根據條件,兩個值(x或y)中的一個將被分配數字100.
非常酷,如果它工作!
我真的不確定它是否在每個現有的C++編譯器上工作!而三元運算符有點混淆,這個模式爲維護者增添了一點樂趣。 – VGE 2011-01-07 07:53:54
@VGE:是的,它有點混亂。可能小到可以忍受(或享受?)。 – 2011-01-07 22:39:59
x和y都是相同類型的左值。 我不認爲這個代碼中有什麼東西是盲目的。 但是你可能會發現一些編譯器無法編譯這段代碼。
我通常更喜歡使用if/else代碼,它們會產生完全相同的代碼,並且對於維護者來說更具可讀性。 如果您想跟蹤bug,則將每個分支放在單獨的分支上更容易設置中斷點。
代碼覆蓋率控制也更容易檢查。
不,它是一個,如果條件下的短形式。這就像
if(somecondition)
{
x = 100;
}
else
{
y = 100;
}
它的目的是工作。
三元運算符?:如果它的兩個可能結果都是左值,就可以產生一個左值(即可以賦值的值),就像它們在你的例子中一樣。
因此,您的示例根據其他值將值分配給x或y。
它是具有相同的結果,因爲這代碼的表達式:
if (some_condition)
x = 100;
else
y = 100;
100被替換x或y的值取決於條件。它也通常用於返回 -
return condition ? x : y ; // If condition is true => return x else return y
在我們的級別是,但是,我不確定從編譯器的角度。在x和y之間至少有一個強大的類型約束,它不存在於`if else`構造中。 – VGE 2011-01-07 07:56:08