【发布时间】:2015-03-11 03:42:46
【问题描述】:
我这里有一个等式,我无法理解 c++ 是如何处理它的。谁能解释一下这个操作?
代码:
#include <stdio.h>
main(){
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int i = 0;
int num = a[i+++a[++i]]+a[++i+i++];
printf("\nnum1: %d i: %d,num,i);
}
为什么答案是 num = 9 而索引 i 刚好等于 4;
【问题讨论】:
-
哦,我的,你这里有maximal munch 和undefined behavior 的问题。这里也没有 C++。
-
放弃那行蹩脚的代码,转而使用人类可以阅读和理解的东西,而无需花费一个小时来了解运算符优先级、序列点和未定义行为如何在评估该行时发挥作用。
-
@ShafikYaghmour 我同意你的其他观点,但为什么它不是 C++,它是无效的,C 和 C++?
-
它是有效的 C++。
printf是有效的 C++。它在风格上不是很好的 C++,而且它使用的 C++ 方法几乎被所有人所反对,但printf是 C++ 标准的一部分,因此说它“不是 C++”是完全错误的。 -
@StevenBurnap Implicit int 然而,从来都不是 C++。