C++ 数组C+中的增量运算符+;

C++ 数组C+中的增量运算符+;,c++,arrays,post-increment,pre-increment,C++,Arrays,Post Increment,Pre Increment,以下代码给出的输出为:ccb int t = 0; char a[] = {'a', 'b', 'c'}; cout<<a[t]<<a[++t]<<a[++t]; int t=0; 字符a[]={'a','b','c'}; c> 我最初的反应:C++不能保证对< < /P>语句的评价顺序 cout<<a[t]<<a[++t]<<a[++t]; 首先计算最里面的短语 当然,上面带括号的表达式无效。从技术上讲,我应该说: o

以下代码给出的输出为:ccb

int t = 0;
char a[] = {'a', 'b', 'c'};
cout<<a[t]<<a[++t]<<a[++t];
int t=0;
字符a[]={'a','b','c'};

c> 我最初的反应:C++不能保证对< < /P>语句的评价顺序
cout<<a[t]<<a[++t]<<a[++t];
首先计算最里面的短语

当然,上面带括号的表达式无效。从技术上讲,我应该说:

operator << (operator << ( operator << ( cout, a[++t]), a[++t]), a[t]);

运算符未指定求值顺序 ++t>代码>不能保证在第一个代码> ++t>代码>之后进行评估。@ ZeNITE,你能提供一个陈述“@ MOX C++标准”的源代码吗?两个
++t
s之间没有序列点,因此它们的求值顺序未指定。@zenith,在
处有一个序列点,但它没有顺序,因为它类似于
f(a,f(b,f(c,d))
。但在我看来,这是值得回答的。我认为这是不对的。当运算符重载时,求值顺序是非常确定的。OP看到的输出可能是由
t
的未初始化值或访问
a
超出边界引起的。它可能是确定性的,但不是预期的。我刚刚用VC试过,参数是从右到左计算的,所以假设从零开始,t[0]在输出中最后出现。@RSahu我不这么认为。即使运算符重载,这也类似于
f(f(f(cout,t),++t),++t)
,函数参数的求值不按顺序排列。但这应该得到解释,不。在
操作符中
cout ( << a[t] ( << a[++t] ( << a[++t] ) ) ) ;
operator << (operator << ( operator << ( cout, a[++t]), a[++t]), a[t]);