C++中关于cout的输出顺序问题

#include<iostream>usingnamespacestd;intmain(){chara[]="aBcd";cout<<strlwr(a)<<"";cout... #include<iostream>
using namespace std;
int main()
{
char a[]="aBcd";
cout<<strlwr(a)<<" ";
cout<<strupr(strlwr(a))<<endl;//第一种输出方式
//cout<<strlwr(a)<<" "<<strupr(strlwr(a))<<endl;//第二种输出方式

}
strlwr(a)是把数组中字母变为小写,strupr(strlwr(a))是把内容变为大写;
当分开两个语句执行的时候是可以的,比如 第一种输出方式;
当把两个语句合并为一个语句输出的时候是不可以的,结果不对。
请高手解答,谢谢。
展开
 我来答
lyqf365
2014-03-02 · TA获得超过1185个赞
知道小有建树答主
回答量:1291
采纳率:100%
帮助的人:796万
展开全部
这个属于未定义行为,代码中是不应该这么写的。

若操作符有两个以上的操作数(例如a+b中,+有两个操作数),则求这两个操作数的值的顺序未定义(也就是说,先求a的值还是先求b的值是未确定的)。

你的 cout<<strlwr(a)<<" "<<strupr(strlwr(a))<<endl;
中的strlwr(a) 和 strup(a) 两个操作是不应该有先后顺序的,但事实是这两个谁先求值会导致结果的不同,所以是不符合C和C++标准的行为。

比如 int a = 10,c;
c = a++ + ++a + a-- + --a;
我们不能确定四个相加的表达式哪一个先求值,所以也就不能确定最后c的值是多少。
heresy_me
2014-03-01 · TA获得超过1719个赞
知道小有建树答主
回答量:1708
采纳率:42%
帮助的人:310万
展开全部
C++可没有固定了运算顺序,只定义了运算优先级。编译器觉得怎样的运算顺序方便一些就怎样做。所以你最好这样写
追问
很感谢你的帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式