使用+ =在C ++中的条件运算

时间:2015-11-30 05:31:20

标签: c++

以下陈述的内容是什么? gcc的输出为:1 101 谁能解释为什么会这样呢?

int a = 100, b = 108, c = 2;
a += b ? c = 1 : c = 0;
cout << c << " " << a;

5 个答案:

答案 0 :(得分:5)

相当于:

a += (b ? (c=1) : (c=0));

扩展:

a = a + (b ? (c=1) : (c = 0));  // if (b!=0) then let c=1, else let c=0

填写a和b:

a = 100 + (108 ? (c=1) : (c = 0));

由于108不是“假”(0)表达式,因此执行c=1的赋值。赋值的副作用是赋值等于赋值。并将该分配的结果添加到:

a = 100 + (c=1);

相当于:

t = (c = 1); // t is 1
a = 100 + t;

因此,因为t是1:

a = 100 + 1;

答案 1 :(得分:3)

添加括号(和空格),以便您可以看到正在发生的事情:

int a = 100,b=108,c=2;

a += ((b != 0) ? c=1 : c=0);

cout<<c<<" "<<a;

现在替换为单词(不再是合法的C / C ++):

int a = 100,b=108,c=2;

a += (if b != 0 then result=c=1 else result=c=0);

cout<<c<<" "<<a;

然后分开:

if b != 0 then result=c=1 else result=c=0
a += result

因为b!= 0:

result = c = 1
a += result

答案 2 :(得分:3)

让我们展开

a = a + (b ? c = 1 : c = 0);

自评估为b = 108的{​​{1}}以来,评估表达式true

现在,作业c = 1已成功,因此返回c = 1,表达式变为

1

因此,最后,值为a = a + 1 c = 1

答案 3 :(得分:3)

int a = 100, b = 108, c = 2;
a += b ? c = 1 : c = 0;

这相当于

a = a + (b ? c = 1 : c = 0);

这(?:)是三元条件运算符,其工作方式与if-else条件相同 如果条件为真,它将先运行,否则运行第二。

       (b ? c = 1 : c = 0;)
 if true    ^^^^^
 if false           ^^^^^^

当b = 108,它将给出TRUE,因此它将使c=1并返回c;
现在  a = a + 1;
这将使a = 101

答案 4 :(得分:2)

?是三元运算符。它在逻辑上等同于以下内容:

int a = 100,b=108,c=2;

if(b) {
  c = 1;
} else {
  c = 0;
}

a+=c;
// c is 1 because b is true (nonzero)
// a is a+c = 101