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

#include<iostream>usingnamespacestd;intmain(){chara[]="aBcd";cout<<strlwr(a)<<"";cout<<strupr(strlwr(a))<<endl;//第一种输出方式//cout<<strlwr(a)<<""<<strupr(strlwr(a))<<e... #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))是把内容变为大写; 当分开两个语句执行的时候是可以的,比如 第一种输出方式; 当把两个语句合并为一个语句输出的时候是不可以的,结果不对。 请高手解答,谢谢。 展开

第1个回答  2020-01-09
这个属于未定义行为,代码中是不应该这么写的。
若操作符有两个以上的操作数(例如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的值是多少。
相似回答