C++输出流的运算顺序

linyongtan_2759 2009-11-22 02:32:04
下面有一个小玩具程序,不过有点不懂,各位朋友帮帮忙解答:


#include<iostream>
int main()
{
int i=0;
std::cout<<i++<<std::ends<<i++<<std::ends<<i++<<std::endl;
return 0;
}

输出结果是:2 1 0

这是为什么呢,为什么不是: 0 1 2 呢?
好像与<<重载有关,但是就是想不明白,各位高手帮忙解析解析吧。
...全文
150 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
love0pal 2009-11-25
  • 打赏
  • 举报
回复
c++中的一切储存都和栈有关,栈的规律是先进后出。上面的结果进栈顺序是 0 1 2 出栈顺序和它相反,于是输出的结果就是2 1 0
linyongtan_2759 2009-11-23
  • 打赏
  • 举报
回复
这句话有点意思,很有道理,不过我们把自圆其说的结论变成经验或者自己的规则就可以很好的运用了,没有什么想法一定是对的,不过他毕竟是一个模式,一个属于自己的模式,到时候遇到问题的时候顶多就会出现两种情况:错和对,总是对的话,自圆其说的结论就正确了,错的话在自圆其说啦,发复如此。
giant1st 2009-11-23
  • 打赏
  • 举报
回复
其实cout就是一个类,<<仅仅是它的运算符,当然你可以看做是个 运算符重载的函数,所以 你后面的变量就是函数的实参, 一般的实参(引用除外)是在栈中,所以顺序是逆序。
lovesi3344 2009-11-23
  • 打赏
  • 举报
回复
呵呵
帮你顶上去

[Quote=引用 6 楼 linyongtan_2759 的回复:]
这句话有点意思,很有道理,不过我们把自圆其说的结论变成经验或者自己的规则就可以很好的运用了,没有什么想法一定是对的,不过他毕竟是一个模式,一个属于自己的模式,到时候遇到问题的时候顶多就会出现两种情况:错和对,总是对的话,自圆其说的结论就正确了,错的话在自圆其说啦,发复如此。
[/Quote]
lovesi3344 2009-11-22
  • 打赏
  • 举报
回复
大家的行为叫做
“事后诸葛亮”
“自圆其说”
linyongtan_2759 2009-11-22
  • 打赏
  • 举报
回复
楼上的兄弟,小弟还是不太懂呐,你再说详细一点可以吗?
鸵鸟 2009-11-22
  • 打赏
  • 举报
回复
我来告诉你为什么
std::cout < <i++ < <std::ends < <i++ < <std::ends < <i++ < <std::endl;
等于
operator<<(operator<<(operator<<(cout, i++), i++), i++);
另外打印顺序不等于计算顺序
jackyjkchen 2009-11-22
  • 打赏
  • 举报
回复
看<<(流)的指向,就应该知道从哪边开始计算了
yzx714 2009-11-22
  • 打赏
  • 举报
回复
<<的顺序是从右向左

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧