关于c++ cout输出顺序问题。
今天看到课本上一个比较费解的例题,就是cout具体的输出问题。先看这个吧:
void ad(int t)
{cout<<"this ad is used";
return t;
}
int main()
{
cout<<"this main is used"<<ad(9);\
return 0;
}
刚开始我以为他会输出
this main is usedthis ad is used
可结果不是,恰恰正好想反,先输出后者。经过查证得知cout在c++中就是如此默认的。就是栈的问题。
cout<<ad就相当于 T operator <<(ostream &cout,ad),参数的入栈顺序就是从右向左。同时求值顺序也是从右到左的。然后进入到缓冲栈之中。当进入输出流时候,就是出栈了,然后显示。
至于像多个的<<符号的,比方说cout<<a<<b;
会做如下认为:operator <<((cout<<a),b);
所以这样的入栈顺序就是先对b入栈了。
这就说的通了。
如果是这样:
int ad(int x)
{
cout<<"this ad is used";
return x;
}
int main()
{
int x=10;
cout<<"x="<<x<<" "<<ad(x);
return 0;
}
这样就应该输出:
this ad is used x=10 10
如果还不明白就单步调试,看看调试结果和输出流的asm汇编文件。太长了,我也没看太懂,好多地址跳转。
有耐心的同学可以好好研究下。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步