变量后面的+符号是什么意思?

时间:2012-04-28 07:37:50

标签: c++ c

以下代码的输出是什么? int x,a=3;
x=+ +a+ + +a+ + +5;
printf("%d %d",x,a);

输出是:11 3.我想知道怎么样?以及在手段后签名是什么?

5 个答案:

答案 0 :(得分:18)

我认为DrYap是对的。

x = + + a + + + a + + + 5; 

与:

相同
x = + (+ a) + (+ (+ a)) + (+ (+ 5));

这里的关键点是:

1)c,c ++没有+作为后缀运算符,所以我们知道我们必须把它解释为前缀

2)monadic +比dyadic +

更紧密地绑定(优先级更高) 有趣的不是吗?如果这些 - 迹象,它看起来不会那么奇怪。 Monadic +/-只是一个主要标志,换句话说,“+ x”与“0 + x”相同。

答案 1 :(得分:13)

在下一个值之前看到+之后的+。如果使用一致的间距,则与:

相同
x = + + a + + + a + + + 5;

但并非所有的+ s都是必要的,因此它的行为与执行相同:

x = a + a + 5;

a的值没有改变,因为你从未使用过增量运算符,即++,两个+符号之间没有空格。 +和++是两个独立的运算符。

答案 2 :(得分:3)

代码似乎等同于:

x= (+(+(a)))+ (+ (+(a)))+ (+(+(5)));

即。 x = a + a + 5。哪个是11.你知道你可以在数字之前加上+或 - 符号,对吧?现在那些+仅表示变量的符号。由于符号为+,因此变量保持不变I.e. “+5”表示“5”,因此“+ a”表示“a”,“+ + a”表示“+(+ a)”表示“a”。以同样的方式你可以写x = + + + 3 + + + + 3 + + + + 5。或x = - + + - 3 + - + - 3 - - + 5;

答案 3 :(得分:3)

由于+运算符从不是彼此相邻的两个运算符,而是始终用空格分隔该语句 x=+ +a+ + +a+ + +5;实际上读为

x=+ (nothing)+a+(nothing) +(nothing) +a+(nothing) +(nothing) +5;

所以基本上最后的等式变成了那种 x=a+a+5;因此结果。

答案 4 :(得分:0)

x = + + a + + + + + + + + 5:这相当于

x = x = + + a + + + a + + +5或 我们可以把它写成x = +(+ a)+(+(+ a))+(+(+ 5)) 并且+'仅表示最终将被评估为的标志 x = a + a + 5.