以下陈述是做什么的?
gcc的输出是:1 101.
谁能解释为什么会这样呢?
int a = 100, b = 108, c = 2;
a += b ? c = 1 : c = 0;
cout << c << " " << a;
Run Code Online (Sandbox Code Playgroud)
它相当于:
a += (b ? (c=1) : (c=0));
Run Code Online (Sandbox Code Playgroud)
扩大:
a = a + (b ? (c=1) : (c = 0)); // if (b!=0) then let c=1, else let c=0
Run Code Online (Sandbox Code Playgroud)
填写a和b:
a = 100 + (108 ? (c=1) : (c = 0));
Run Code Online (Sandbox Code Playgroud)
由于108不是"假"(0)表达式,c=1因此执行赋值.赋值的副作用是赋值等于赋值.并将该分配的结果添加到:
a = 100 + (c=1);
Run Code Online (Sandbox Code Playgroud)
这相当于:
t = (c = 1); // t is 1
a = 100 + t;
Run Code Online (Sandbox Code Playgroud)
因此,因为t是1:
a = 100 + 1;
Run Code Online (Sandbox Code Playgroud)