课程
/后端开发
/C++
/C++远征之模板篇
为什么打印出来的是这样呢?
2018-04-11
源自:C++远征之模板篇 4-3
正在回答
我今天也遇到了这个问题
对于
int a=1;
cout<<a++<<a++; 输出的是21
当你在同一个cout中再加入a++ ,++a ,a--这些的时候 结果是很难预测的, 下面是百度的解释
cout整个表达式中的子表达式的求值顺序是没有指定的,而各个表达式之间都在a上操作,并改变a的状态(即:表达式的副作用)
所以你这个式子的行为是未定义的,应当去避免这种行为,而不应该去解释这些未定义的东西。
qq_枫火连山岳_0
我也遇到了这两种情况,第二种是因为中间的代码:
cout << (coor++).getX() << "," ; //第一句 cout << (coor++).getY() << endl; //第二句
里面第一句输出加第一次之前X的值,也就是1,输出后X变成了2,Y变成4;
第二句输出第二次++之前Y的值,也就是4,输出后X变成了3,Y变成5;
第二种情况是这样的,那么第一种呢???我怎么也想不通中间怎么输出的2,3
第一张图我不知道为什么,上课说的第二张图,X先进行运算,不加,所以是1,Y在之前已经有过coor++,所以后置加了一次,所以是4
第一张图打印2,3那句话这么写就行了
cout<<(coor1++).getX() << "," ;
cout<<(coor1++).getY() << endl;
分行写
___TINGWEN 提问者
第一个输出1,3楼主应该没有问题。
后++定义的是先算后加(代码程序中输出的是old的coordinate类型,所以输出的数大小不变),所以(coor++).getX()输出的数还是1,但是执行了这个之后,再执行getX()和getY()输出应该是2,4了,所以后面的(coor++).getY()输出的是4,执行完这个语句过后,再执行getX()和getY()输出应该是3,5。
B_L
举报
本C++教程力求即学即会,所有知识以实践方式讲解到操作层面