采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
int i{ 1 }; i = i++;
返回2。 如果是自定义的后置++,则返回老值。
T t{ 1.0,1.0 } t = t++;
返回1.0,1.0。 这是怎么回事?请老师讲解。
原则上课程之外的问题不做解答。这里的知识和课程中的内容有一定关系,可以用我们所学的知识解答清楚。你可以多看几次视频内容;首先
int i{ 1 };i = i++;
的返回值你的理解应该有误,这里返回值是赋值表达式的返回值,不是2,是1;
你cout << (i=i++) << endl; 试试
T t{ 1.0,1.0 }t = t++; 的问题利用我们课上的重载函数和赋值表达式的返回值的知识,我相信你可以自己解答了。
谢谢老师的解答,cout << (i=i++) << endl;的打印值为1。经过debug仔细查看Complex c{ 1.0,1.0 };c = c++;int i{ 1 };i = i++;的运作方式确实不同。自定义的++重载在";"结束前就已经完成,之后又进行了赋值操作,变回了原来的1.0,1.0。int的++是在";"结束后才进行的,所以在debug的时候得到的值为2。这也可以通过多次执行cout << (i=i++) << endl;与cout << (c=c++) << endl; 语句体现,前者每次打印的值在递增,后者始终为一个值。通过百度查询,猜测可能是编译器优化的结果,不知道这个猜测正确吗?如何才能让自定义的++重载与系统自带的相同?
你仔细看下我们Complex的前置后置操作符重载,是可以做到的,后置是先返回临时对象,再+1,前置是先对值+1,然后将对象返回。
登录后可查看更多问答,登录/注册
一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维
1.3k 12
1.2k 12
1.3k 10
1.2k 9
1.0k 9