alin

关于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汇编文件。太长了,我也没看太懂,好多地址跳转。

有耐心的同学可以好好研究下。

posted on 2010-12-08 15:40  realcome  阅读(756)  评论(2编辑  收藏  举报

导航