i++ + i++ 的值是多少

未定义。基本上,无论 C 还是 C++,如果你在同一个表达式中两次读取同一个变量,并且还对该变量进行写操作,那么结果就是未定义的。不要这么干。还有个例子是:

v[i] = i++;

相关的例子:

f(v[i],i++);

在此,因为函数参数的求值顺序是未定义的,所以结果也是未定义的

之所以不定义求值顺序,是为了让编译器有更大的自由度去生成性能更高的代码。编译器应该为类似这些例子发出警告,因为这些都是典型的微小错误(或者说是潜在的微小错误)。很遗憾,尽管数十年的工夫过去了,大多数编译器仍然不会为此发出警告,而将这项工作交给了专门的、独立的、并且鲜有人用的工具。