这个c++编程的输出顺序我搞不懂 请大家帮下忙 谢谢!

#include<iostream>
using namespace std;
//add()函数的定义,其有返回值
double add(double x,double y)
{
double z;
z=x+y;
cout<<x<<"+"<<y<<"="<<z<<endl;
return(z);
}

int main()
{
double a=0.5,b=1.0;

cout<<"add(1.5,2.5)="<<add(1.5,2.5)<<endl;
我认为输出应该是add(1.5,2.5)=1.5+2.5=4
4
但实际上正确输出是:
1.5+2.5=4
add(1.5,2.5)=4
为什么呢?

第1个回答  2011-04-19
cout操作是先压栈后输出,压栈顺序从右向左,输出顺序从左向右。
对于你的例子cout<<"add(1.5,2.5)="<<add(1.5,2.5)<<endl;
先依次 把 endl, add(1.5, 2.5), "add(1.5,2.5)=" 压栈,然后再依次从栈顶弹出并显示
在把 add(1.5, 2.5)的值 压栈时就必然要先执行这个函数,导致 1.5+2.5=4 先被输出
然后才开始出栈和显示,依次显示 add(1.5,2.5)= 4 换行本回答被提问者采纳
第2个回答  2011-04-19
你的程序执行顺序是这样的
cout<<操作符将字符串"add(1.5,2.5)="写入到输出缓冲区,这里不在终端上显示
然后调用函数add(1.5,2.5),在函数add()中有输出
cout<<x<<"+"<<y<<"="<<z<<endl;
所以先输出了 1.5+2.5=4
为什么这里能显示呢?那是因为有endl的原因,它的作用就书刷新输出缓冲区,使其显示在终端上。
所以最后才显示
add(1.5,2.5)=4。
说的不怎么好,
希望对你有帮助哈!
第3个回答  2011-04-19
因为C++中输出流是否显示以ENDL表示
不同函数的调用时输出流所处的内存不一样
主函数里的输出内容只有在看见其中的ENDL才会输出。
因此会先显示被调用函数中的内容,待主函数中的输出流遇见ENDL才输出流中内容
第4个回答  2011-04-19
楼主您好:
很高兴认识你,我开了自己的淘宝店,有自己的工作方式,有自己的交流方法,幸运的我,想到当时自己进入淘宝时的无助心态,在这里。。希望我能够给你一点点的帮助~~o(∩_∩)o如果您还有任何问题或者愿意沟通或者咨询的,很荣幸能得到您的关注哦~~我的Q见帐号~~~很希望能够帮到你!~~~ ^-^ ~嘿嘿追问

如果知道为什么帮忙恢复下,不知道别捣乱,好吧。淘宝做广告都做到这里了。无语。。。

相似回答