【发布时间】:2015-09-25 06:12:48
【问题描述】:
以下代码给出的输出为:ccb
int t = 0;
char a[] = {'a', 'b', 'c'};
cout<<a[t]<<a[++t]<<a[++t];
我想知道,在生成指定输出的这段代码中实际发生了什么。任何帮助将不胜感激。
【问题讨论】:
-
第二个
++t不保证在第一个++t之后被评估。 -
@zenith,你能提供一个说明这一点的来源吗?
-
@Mox C++ 标准。两个
++ts 之间没有序列点,因此它们的评估顺序未指定。 -
@zenith,
cout << a[t]有一个序列点,因为它涉及函数调用。由于重载了 cout << a[t] << a[++t] << a[++t] 等效于((cout << a[t]) << a[++t]) << a[++t]。 OP看到的输出可能是t的未初始化值或访问a越界引起的。 -
它是无序的,因为它类似于
f(a,f(b,f(c,d)))。但这值得 IMO 回答。
标签: c++ arrays post-increment pre-increment