当中间有空格时+ +
,表达“ + + a
”是什么意思。这个表达式是如何计算的?
int main()
{
int a = 3;
printf("%d %d", + +a, a);
}
以及如何a+++a
评估?它是未定义的或未指定的还是已定义的实现?
当中间有空格时+ +
,表达“ + + a
”是什么意思。这个表达式是如何计算的?
int main()
{
int a = 3;
printf("%d %d", + +a, a);
}
以及如何a+++a
评估?它是未定义的或未指定的还是已定义的实现?
这是一个无操作 - 两次因为+ a
是一个无操作并且它被重复。
a+++a
被明确解析为a++ + a
,但在执行时会导致未定义的行为。
请注意,如果代码设置为a = -3;
,则打印的值仍为-3
, 两次。
当运算符中间有空格时++
,您只需应用一元加运算符两次。
关于表达式a+++a
,C 规范说,当存在这种歧义时,尽可能多地咀嚼(“贪婪词法分析器”或“最大咀嚼”规则)。所以a+++a
被评估为a++ + a
根据该规则,像, 这样的表达式z = y+++++x;
将被解析为z = y++ ++ +x;
,这是无效的(后增量的结果本身不是可增量的)。
+a
正好相反-a
。
换句话说, where-a
将有相反的符号a
,+a
只是重新确认 的现有正/负符号a
。
然后又是一个外部正数,仍然是 3。
相反的版本是:
printf("%d %d",- -a,a);
这将是“负负 3”......这又是+3
.