C++ 有人能解释一下这种信用证吗+;语法?

C++ 有人能解释一下这种信用证吗+;语法?,c++,c,programming-languages,syntax,C++,C,Programming Languages,Syntax,sombody能解释一下这是怎么回事吗 int x, y; .... (some_condition ? x : y) = 100; < P>这是工作还是IS只是一个“盲”翻译或编译器(比如代码< VC++(10)< /> >等于 10 [VEC] < /C> >取决于条件,您分配给 x < /代码>或 y >代码>。该代码段基本上与此等效: if(some_condition) { x = 100; } else { y = 100; } 它是由C++标准保证的,虽然你必须

sombody能解释一下这是怎么回事吗

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

< P>这是工作还是IS只是一个“盲”翻译或编译器(比如代码< VC++(10)< /> >等于<代码> 10 [VEC] < /C> >取决于条件,您分配给<代码> x < /代码>或<代码> y >代码>。该代码段基本上与此等效:

if(some_condition)
{
    x = 100;
}
else
{
    y = 100;
}

它是由C++标准保证的,虽然你必须仔细阅读相关的章节。运算符的规则出人意料地复杂(主要是由于执行的类型转换),因此条件运算符和if-then-else语句并非始终完全等价

但是,在上面的代码片段中,标准中的这一段是相关的:

5.16/4条件运算符:

如果第二个和第三个操作数是左值且类型相同,则结果为该类型且为左值


至少在C++中,代码段基本上等价于:

if(some_condition)
{
    x = 100;
}
else
{
    y = 100;
}

它是由C++标准保证的,虽然你必须仔细阅读相关的章节。运算符的规则出人意料地复杂(主要是由于执行的类型转换),因此条件运算符和if-then-else语句并非始终完全等价

但是,在上面的代码片段中,标准中的这一段是相关的:

5.16/4条件运算符:

如果第二个和第三个操作数是左值且类型相同,则结果为该类型且为左值


它看起来像一个选择左值的三元运算符。我不知道这是可以做到的,但我想这是有道理的。根据条件,两个值(x或y)中的一个将被分配数字100


非常酷,如果它工作

它看起来像一个选择左值的三元运算符。我不知道这是可以做到的,但我想这是有道理的。根据条件,两个值(x或y)中的一个将被分配数字100


非常酷,如果它工作

x和y都是同一类型的左值。 我不认为这段代码有什么盲目之处。 但您可能会发现某些编译器无法编译此代码

我通常更喜欢使用if/else代码,它生成完全相同的代码,并且对于维护人员来说更具可读性。 若你们想追踪bug,把每个分支放在单独的分支上更容易,设置断点也更容易


代码覆盖率控制也更容易检查。

x和y都是同一类型的左值。 我不认为这段代码有什么盲目之处。 但您可能会发现某些编译器无法编译此代码

我通常更喜欢使用if/else代码,它生成完全相同的代码,并且对于维护人员来说更具可读性。 若你们想追踪bug,把每个分支放在单独的分支上更容易,设置断点也更容易


代码覆盖率控制也更容易检查。

如果x和y是l值,则三元表达式是l值


讨论

如果x和y为l值,则三元表达式为l值


已讨论

否,它是if条件的缩写形式。就像

if(somecondition)
{
  x = 100;
}
else
{
  y = 100;
}

不,它是if条件的缩写形式。就像

if(somecondition)
{
  x = 100;
}
else
{
  y = 100;
}

这是为了工作

三元运算符?:如果两个可能的结果都是左值,则可以生成左值(即您可以指定的对象),如您的示例中所示


因此,您的示例根据其他值为x或y指定一个值。

它的目的是工作

三元运算符?:如果两个可能的结果都是左值,则可以生成左值(即您可以指定的对象),如您的示例中所示


<> p>因此,您的示例根据其他值将值赋值为x或y。

这是有效的C++和无效的c/p>

条件表达式的结果可以是(在这种情况下)是C++中的一个LValk,引用的是<代码> x或<代码> y>代码>,取决于<代码>某个条件评估为<代码>真< /COD>。在C++中,如果某个条件是<代码>真/ <代码>,当转换为<代码>布尔O/<代码>时,赋值为100,否则,代码< 100 > />代码被分配为“./p>”。


<>在C中,条件表达式的结果不是赋值,不能赋值。

这是有效的C++,无效的c/p>

条件表达式的结果可以是(在这种情况下)是C++中的一个LValk,引用的是<代码> x或<代码> y>代码>,取决于<代码>某个条件评估为<代码>真< /COD>。在C++中,如果某个条件是<代码>真/ <代码>,当转换为<代码>布尔O/<代码>时,赋值为100,否则,代码< 100 > />代码被分配为“./p>”。


在C语言中,条件表达式的结果决不是左值,不能赋值。

它是一个与此代码具有相同结果的表达式:

if (some_condition)
  x = 100;
else
  y = 100;

它是一个与此代码具有相同结果的表达式:

if (some_condition)
  x = 100;
else
  y = 100;

x或y的值替换为100取决于条件。它也通常在返回时使用-

return condition ? x : y ; // If condition is true => return x else return y 

x或y的值替换为100取决于条件。它也通常在返回时使用-

return condition ? x : y ; // If condition is true => return x else return y 

我真的不确定它是否在工作中对每一个现有的C++编译器!三元运算符有点模糊,这个模式为维护人员增加了一点乐趣。@VGE:是的,它有点模糊。也许小到可以容忍(或享受?)。我真的不确定它是否在工作于每一个现有的C++编译器上!三元运算符有点模糊,这个模式为维护人员增加了一点乐趣。@VGE:是的,它有点模糊。可能小到可以容忍(或享受?)。在我们这个水平上,是的,但我不是