有人可以解释这个C / C ++语法吗?

时间:2011-01-07 07:49:24

标签: c++ c programming-languages syntax

sombody可以解释这是如何工作的吗?

int x, y;
....
(some_condition ? x : y) = 100;

这是打算工作还是只是一个“盲”翻译或编译器(类似vec[10]等于10[vec])?

10 个答案:

答案 0 :(得分:13)

这是有效的C ++和无效的C。

条件表达式的结果可以是(在这种情况下是)C ++中的左值,引用xy之一取决于{{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)

根据条件分配给xy

答案 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