为了账号安全,请及时绑定邮箱和手机立即绑定

为什么打印出来的是这样呢?

为什么打印出来的是这样呢?

https://img1.sycdn.imooc.com//5ace06ce000168d512840573.jpg

https://img1.sycdn.imooc.com//5ace06cf0001c06312840573.jpg


正在回答

5 回答

我今天也遇到了这个问题

对于

int a=1;

cout<<a++<<a++; 输出的是21

当你在同一个cout中再加入a++ ,++a ,a--这些的时候  结果是很难预测的, 下面是百度的解释

cout整个表达式中的子表达式的求值顺序是没有指定的,而各个表达式之间都在a上操作,并改变a的状态(即:表达式的副作用)

所以你这个式子的行为是未定义的,应当去避免这种行为,而不应该去解释这些未定义的东西。

0 回复 有任何疑惑可以回复我~
#1

qq_枫火连山岳_0

补充一点 题目中的情况应该是按从右至左的顺序得到的
2018-11-02 回复 有任何疑惑可以回复我~

我也遇到了这两种情况,第二种是因为中间的代码:

	cout << (coor++).getX() << "," ;	//第一句
	cout << (coor++).getY() << endl;        //第二句

里面第一句输出加第一次之前X的值,也就是1,输出后X变成了2,Y变成4;

第二句输出第二次++之前Y的值,也就是4,输出后X变成了3,Y变成5;

第二种情况是这样的,那么第一种呢???我怎么也想不通中间怎么输出的2,3

0 回复 有任何疑惑可以回复我~

第一张图我不知道为什么,上课说的第二张图,X先进行运算,不加,所以是1,Y在之前已经有过coor++,所以后置加了一次,所以是4

0 回复 有任何疑惑可以回复我~

第一张图打印2,3那句话这么写就行了

cout<<(coor1++).getX() << "," ;

cout<<(coor1++).getY() << endl;

分行写

0 回复 有任何疑惑可以回复我~
#1

___TINGWEN 提问者

第一张图这么写打印出来的是2,3,而第二张图是分行打印的出来是1,4,我不明白分行和不分行打印为什么不同
2018-07-13 回复 有任何疑惑可以回复我~

第一个输出1,3楼主应该没有问题。

后++定义的是先算后加(代码程序中输出的是old的coordinate类型,所以输出的数大小不变),所以(coor++).getX()输出的数还是1,但是执行了这个之后,再执行getX()和getY()输出应该是2,4了,所以后面的(coor++).getY()输出的是4,执行完这个语句过后,再执行getX()和getY()输出应该是3,5。

0 回复 有任何疑惑可以回复我~
#1

___TINGWEN 提问者

嗯,我知道后置++是先算后加,对于1,3和3,5的结果没有疑惑,我疑惑的是两张图片中,中间打印1,3和1,4的语句; 我是这么理解的,对于第一张图片第二条打印语句,因为(coor1++).getX()计算之后并没有立刻打印,而是再进行计算(coor1++).getY(),而计算完(coor1++).getY()之后立刻就打印了,所以打印出来是2,3; 同理,对于第二张图片的第二条和第三条打印语句,因为(coor1++).getX()和(coor1++).getY()都是计算之后就立刻就打印了,为什么不是1,3呢?为什么(coor1++).getY()有机会再加1呢?
2018-04-13 回复 有任何疑惑可以回复我~
#2

B_L

怎么觉得第一张图片结果有问题,你试过了第一张图片了吗?
2018-04-13 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之模板篇
  • 参与学习       91156    人
  • 解答问题       318    个

本C++教程力求即学即会,所有知识以实践方式讲解到操作层面

进入课程

为什么打印出来的是这样呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信