为什么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;
} 展开
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;
} 展开
3个回答
展开全部
栈是后进先出的啊,入栈顺序从右到左,出栈的时候正好反过来啊。
入栈c-b-a,出栈就是a-b-c就是正确的打印顺序了。
“那么cout<<fa()<<fb()<<fc()<<endl;为什么不是先执行cout<<fa()然后返回一个输出流对象再按顺序继续执行后面的东西呢?”
因为你这是一个流所以不能中间返回,否则你要三个流。
这是标准输入输出流这个类中的设计,如果你自己做重载的话也可以按照你说的这个流程来运行。
___________________________________________________________________
你自己都重载了当然是按照你重载之后的顺序了...
入栈c-b-a,出栈就是a-b-c就是正确的打印顺序了。
“那么cout<<fa()<<fb()<<fc()<<endl;为什么不是先执行cout<<fa()然后返回一个输出流对象再按顺序继续执行后面的东西呢?”
因为你这是一个流所以不能中间返回,否则你要三个流。
这是标准输入输出流这个类中的设计,如果你自己做重载的话也可以按照你说的这个流程来运行。
___________________________________________________________________
你自己都重载了当然是按照你重载之后的顺序了...
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于参数是函数的流对象cout的执行过程是,先执行最右边函数的函数体,计算出函数的值,再将这个值入栈,然后再以此类推执行次右边的,直到将所有的参数值都放入栈中,最后才将栈中的值流(cout)到显示器。(输出流在重载插入运算符"<<"时就定义了它的的参数必须是从右往左执行。当然,如果你够牛的话也可以改成是从左往右执行,真到那时你都能自己编VC了)
总的来说,多个数据同时输出时,C++系统将按照从右往左的顺序依次计算各项的值,并按照从左到右的顺序输出。
总的来说,多个数据同时输出时,C++系统将按照从右往左的顺序依次计算各项的值,并按照从左到右的顺序输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询