以下陈述的内容是什么? gcc的输出为:1 101 谁能解释为什么会这样呢?
int a = 100, b = 108, c = 2;
a += b ? c = 1 : c = 0;
cout << c << " " << a;
答案 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