cout<<的顺序问题

next163 2008-10-11 01:23:05

#include <iostream>

int couttest()
{
static int n=0;
return ++n;
}


int main()
{

std::cout<couttest()<<couttest();

return 0;
}

这样的代码输出的是21,而不是12.我想知道为什么?
我在写stack时候发现的。在cout后面连续写pop()输入的顺序就让我很奇怪了。分开写就没问题。
谢谢~~~
...全文
193 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ivan_08 2008-10-11
  • 打赏
  • 举报
回复
先计算右边的,再到左边的,从右到左吧
lyle3 2008-10-11
  • 打赏
  • 举报
回复
参数压栈顺序不同啦..
zclever 2008-10-11
  • 打赏
  • 举报
回复
cout也是函数,它的参数就是要输出的数。这些参数的调用顺序依赖于具体的编译器。VC6.0是从右向左执行。
太乙 2008-10-11
  • 打赏
  • 举报
回复
跟printf一样的,入栈顺序是从右至左
next163 2008-10-11
  • 打赏
  • 举报
回复
哦,谢谢
Big鹏 2008-10-11
  • 打赏
  • 举报
回复

楼主在编译器上看一下该行的汇编代码就一目了然了。
看看编译器是如何执行的!!
jia_xiaoxin 2008-10-11
  • 打赏
  • 举报
回复
这跟cout函数参数的入栈顺序有关,是从后往前计算的,所以会出现你提到的问题。
zgjxwl 2008-10-11
  • 打赏
  • 举报
回复
C++中,只有&& || ?: 和逗号运算符等几个有限的运算符是规定了操作数的运算顺序的
但是<<并没有规定它的操作数的运算顺序,所以这属于求值顺序未定义行为,具体依赖于编译器
baihacker 2008-10-11
  • 打赏
  • 举报
回复
一般说来是从右往左计算的.
因为后面的要先入栈....然后在调用时看的话,从低到高就是就是从左到右的了.
然后这个是没有保证的.
如果你的表达式具有副作用,在这里就是说,输出的每个项的求值顺序会影响结果,最好是每个输出项用一个cout.
然后从右往左的计算是没有保证的,比如在vs2008中,如果发现有形如++y的表达式,就会把所有的++y求一次,然后再进行计算表达式的值.
这样一般就会出错,从而提醒你写更好的代码.

65,211

社区成员

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

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