我真的不知道后缀。我知道它首先使用标识符,然后增加或减少,首先显示i
然后++
。但现在我认为我错了,仍然不明白。
#include <iostream>
using namespace std;
int main()
{
int i = 0;
cout << i << i++ << i;
cout << "\n\n\nPress Enter to close the window . . . ";
cin.clear();
cin.sync();
cin.get();
return 0;
}
输出:
101
Press Enter to close the window . . .
在递增readed之前,第一个i
被更改。为什么?
我期待
001
Press Enter to close the window . . .
有人可以解释一下。
答案 0 :(得分:5)
永远不要做这样的事情,这是未定义的
cout << i << i++ << i;
做得更好
cout << i << i << (i + 1);
i ++;
如果您需要预期的结果。
案例
cout << i++;
已定义且完全正常。
答案 1 :(得分:-1)
我认为未定义的*)这里是函数参数评估的 order 。你在这里实际调用的是对(重载)
的函数调用std::ostream& operator<< (std::ostream&, int);
并且第一个参数是对同一函数的另一个调用的输出,所以你的
cout << i << i++ << i;
扩展为
operator<<( operator<<( operator<<(cout,i), i++), i);
由于未指定评估函数参数的顺序,因此此处可能发生任何事情。您可以通过编写单独的行来避免这种情况:
cout << i;
cout << i++;
cout << i;
扩展为无害
operator<<(cout,i);
operator<<(cout,i++);
operator<<(cout,i);
*)编辑:更准确地说,cout<<i<<i++;
是 undefined ,因为未指定中的函数参数的评估顺序。