sombody可以解释这是如何工作的吗?
int x, y;
....
(some_condition ? x : y) = 100;
这是打算工作还是只是一个“盲”翻译或编译器(类似vec[10]
等于10[vec]
)?
答案 0 :(得分:13)
这是有效的C ++和无效的C。
条件表达式的结果可以是(在这种情况下是)C ++中的左值,引用x
或y
之一取决于{{1}评估为some_condition
。在C ++中,如果some_condition在转换为true
时为x
,则为true
分配值100,否则为bool
分配100。
在C中,条件表达式的结果绝不是左值,也不能分配给它。
答案 1 :(得分:4)
至少在C ++中,该代码片段与此基本相同:
if(some_condition)
{
x = 100;
}
else
{
y = 100;
}
由C ++标准保证,但您必须仔细阅读相关章节。运算符的规则非常复杂(主要是由于执行的类型转换),因此条件运算符和if-then-else语句并不是始终完全等效。
但是,在上面的代码段中,标准中的此段落是相关的:
5.16 / 4条件运算符:
如果第二个和第三个操作数是左值并且具有相同的类型,则结果是该类型并且是左值。
答案 2 :(得分:2)
这是一个与此代码具有相同结果的表达式:
if (some_condition)
x = 100;
else
y = 100;
答案 3 :(得分:1)
x和y都是相同类型的左值。 我认为这段代码中没有盲目的东西。 但是你可能会发现一些编译器无法编译这段代码。
我通常更喜欢使用if / else代码来生成完全相同的代码,并且对于维护者来说更具可读性。 如果你想跟踪bug,更容易将每个分支放在单独的分支上,更容易设置断点。
代码覆盖率控制也更容易检查。
答案 4 :(得分:1)
如果x和y是l值,则三元表达式是l值。
讨论here
答案 5 :(得分:1)
不,它是if条件的简短形式。就像
if(somecondition)
{
x = 100;
}
else
{
y = 100;
}
答案 6 :(得分:0)
根据条件分配给x
或y
。
答案 7 :(得分:0)
它看起来像三元运算符选择左值。我不知道可以做到,但我认为这很有道理。根据条件,两个值(x或y)中的一个将被赋予数字100。
非常酷,如果它有效!
答案 8 :(得分:0)
打算工作。
三元运算符?:如果两个可能的结果都是左值,则可以产生一个左值(即你可以分配给它的东西),就像它们在你的例子中一样。
因此,您的示例会根据其他值为x或y指定值。
答案 9 :(得分:0)
x或y的值被100替换取决于条件。它通常在返回时使用 -
return condition ? x : y ; // If condition is true => return x else return y