C++参考资料之谜:我的输出似乎颠倒了。为什么?
以下代码的输出是不带引号的“321”。为什么不是“123”?
#include <iostream>
using namespace std;
int& inc(int& start)
{
return ++start;
}
int main()
{
int i = 0;
cout << inc(i) << inc(i) << inc(i) << endl;
}
The output of the following code is "321" without quotes. Why not "123"?
#include <iostream>
using namespace std;
int& inc(int& start)
{
return ++start;
}
int main()
{
int i = 0;
cout << inc(i) << inc(i) << inc(i) << endl;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的代码调用未指定的行为,因为评估的顺序
operator<<
的参数未指定对
operator<<
的调用修改同一变量。不要编写这样的代码。注意:请注意,该代码不会导致未定义的行为,因为在修改
i
和读取它之间存在序列点(至少一个函数调用)。Your code invokes Unspecified Behaviour because the order of evaluation of the
arguments of
operator<<
is unspecifiedCalls to
operator<<
modify the same variable. Don't write such code.Note : Note that the code doesn't result in undefined behavior because there are sequence points (at least one function call) between when
i
is modified and when it is read'.