c++中cout函数的问题

intfram(){staticintf=0;f=f+1;returnf;}intmain(){cout<<fram()<<fram()<<fram()<<endl;co... int fram()
{
static int f = 0;
f = f + 1;
return f;
}
int main()
{

cout << fram() << fram() << fram() << endl;
cout << 1 << 2 << 3 << endl;

cin.get();
return 0;
}
这两条 输出为什么 是:
321
123
??
展开
 我来答
百度网友e608075
2014-04-20 · TA获得超过243个赞
知道小有建树答主
回答量:302
采纳率:57%
帮助的人:135万
展开全部
这个C++标准只规定了<<的优先级和结合性,并没有规定它的求值顺序,所以这个是由编译器自己决定先计算哪个的,不过一般不会在一个表达式中使用了一个对象,而在子表达式中改变这个对象的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cxwtc123
2014-04-20 · TA获得超过160个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:176万
展开全部

<< 中的 计算过程为 从右到左 。

cout << fram()  //第三次调用
<< fram() //第二次调用
<< fram() //第一次调用
<< endl;
追问
那么 为什么 cout<<1<<2<<3<<endl; 

的输出是:
1 2 3
??
xiexie
追答
cout << fram() << fram() << fram() << endl;  
// 等效于:
int val1 = fram();//第一次调用
int val2 = fram();//第二次调用
int val3 = fram();//第三次调用
cout << val3 << val2 << val1 << endl;

// cout 输出内容顺序是 符合 看到的 自左向右 的顺序的
// << ... << 中的 计算过程 则 为相反的顺序
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式