为什么cout从右向左入栈

#include<iostream>usingnamespacestd;intfa(){cout<<"fa()"<<endl;return1;}intfb(){cout<... #include<iostream>
using namespace std;
int fa()
{
cout<<"fa()"<<endl;
return 1;
}
int fb()
{
cout<<"fb()"<<endl;
return 2;
}
int fc()
{
cout<<"fc()"<<endl;
return 3;
}
int main()
{
cout<<fa()<<fb()<<fc()<<endl;
return 0;
}
补充!我自己重载了一下<<,发现这个并不是从右向左入栈,请看:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

class CPeople
{
public:
CPeople(char i[])
{
strcpy(m_name,i);
}
const char* GetName() const
{
cout<<m_name<<endl;
return m_name;
}
friend ofstream& operator<<(ofstream& os,const CPeople& pp);
private:
char m_name[10];
};

ofstream& operator<<(ofstream& ofs,const CPeople& pp)
{
ofs<<pp.GetName();
return ofs;
}

int main()
{
CPeople x("111"),y("222"),z("333");
ofstream is("1.txt");
is<<x<<y<<z;
is.close();
return 0;
}
展开
 我来答
♂凡鸟♂fcb78ab
2010-07-28 · TA获得超过3711个赞
知道小有建树答主
回答量:586
采纳率:100%
帮助的人:617万
展开全部
栈是后进先出的啊,入栈顺序从右到左,出栈的时候正好反过来啊。
入栈c-b-a,出栈就是a-b-c就是正确的打印顺序了。

“那么cout<<fa()<<fb()<<fc()<<endl;为什么不是先执行cout<<fa()然后返回一个输出流对象再按顺序继续执行后面的东西呢?”
因为你这是一个流所以不能中间返回,否则你要三个流。
这是标准输入输出流这个类中的设计,如果你自己做重载的话也可以按照你说的这个流程来运行。
___________________________________________________________________
你自己都重载了当然是按照你重载之后的顺序了...
华师来的
2010-07-17 · TA获得超过114个赞
知道小有建树答主
回答量:140
采纳率:0%
帮助的人:0
展开全部
cout参数入栈的顺序是从右到左

1.cout参数入栈的顺序是从右到左...例如cin < <a < <b < <c;在栈中的位置如下:c-b-a.. <-(栈指针);但是输出是从栈指针的位置开始的,意思即这时的输出顺序仍然是abc....否则有违常理...

2.如果参数是有待计算的函数,例如...cin < <f(a) < <f(b) < <f(c) < <endl;这时我认为cin会先把函数放进栈中然后再计算..意思是这时栈顺序是f(c)-f(b)-f(a).. <-..但是这时候计算的顺序却是f(c)最先,f(b)次之,f(a)最后...

看这个程序
#include <iostream>
using namespace std;
int fa(){ cout<<"fa()"<<endl; return 1;}
int fb(){ cout<<"fb()"<<endl; return 2;}
int fc(){ cout<<"fc()"<<endl; return 3;}
int main(){ cout<<fa()<<fb()<<fc()<<endl; return 0;}

输出 fc() fb() fa() 123
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
第一根废柴
2010-07-19 · TA获得超过197个赞
知道答主
回答量:67
采纳率:0%
帮助的人:38.6万
展开全部
对于参数是函数的流对象cout的执行过程是,先执行最右边函数的函数体,计算出函数的值,再将这个值入栈,然后再以此类推执行次右边的,直到将所有的参数值都放入栈中,最后才将栈中的值流(cout)到显示器。(输出流在重载插入运算符"<<"时就定义了它的的参数必须是从右往左执行。当然,如果你够牛的话也可以改成是从左往右执行,真到那时你都能自己编VC了)
总的来说,多个数据同时输出时,C++系统将按照从右往左的顺序依次计算各项的值,并按照从左到右的顺序输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式