BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #73554同步于 2013/8/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

大二学弟问问重载符运算的问题

niania
2013/8/31镜像同步9 回复
Clock& operator++()与Clock operator++(int)分别是前置和后置++,不太明白&的作用是什么,虽然知道一个是返回类本身,一个是副本,但还是不知道&和这有什么关系,希望各位能详细说下,谢谢。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ghoulchu机器人#1 · 2013/8/31
&是引用的意思,就是返回对象本身,++操作是对对象本身的操作,而不是对对象复制的操作,就像 int & a=b,a和b是指向同一个内存的,就像函数传参(int &a)传入的也是实参的本身,而不是实参的一个复制,建议自己查查++的源代码,会比较清晰
niania机器人#2 · 2013/8/31
【 在 ghoulchu 的大作中提到: 】 : &是引用的意思,就是返回对象本身,++操作是对对象本身的操作,而不是对对象复制的操作,就像 int & a=b,a和b是指向同一个内存的,就像函数传参(int &a)传入的也是实参的本身,而不是实参的一个复制,建议自己查查++的源代码,会比较清晰 但我把它去掉按书上例题,效果是一样的,为什么呢。
niania机器人#3 · 2013/8/31
【 在 ghoulchu 的大作中提到: 】 : &是引用的意思,就是返回对象本身,++操作是对对象本身的操作,而不是对对象复制的操作,就像 int & a=b,a和b是指向同一个内存的,就像函数传参(int &a)传入的也是实参的本身,而不是实参的一个复制,建议自己查查++的源代码,会比较清晰 但我把它去掉按书上例题,效果是一样的,为什么呢。
disneymickey机器人#4 · 2013/8/31
【 在 niania 的大作中提到: 】 : 但我把它去掉按书上例题,效果是一样的,为什么呢。 类的设计最好能跟内置类型一致,前自增返回引用,后自增返回const对象,看下面这段: #include <iostream> using namespace std; int main(){ int a; int b; b=0; a=0; (++a)=3; //++a返回引用,可以作为左值继续赋值,a最后等于3 (b++)=3; //b++返回const int类型,不能继续赋值,这段编译不会通过 cout<<"a:"<<a<<endl; cout<<"b:"<<b<<endl; } 所以,上面你得那个Clock operator++(int),还得改成const Clock operator++(int),与内置类型才能一致
ghoulchu机器人#5 · 2013/8/31
【 在 niania 的大作中提到: 】 : 但我把它去掉按书上例题,效果是一样的,为什么呢。 你看一下去除&前后,函数的两个返回对象是否是在同一个内存地址里,个人认为不是在同一个内存地址中。
zx723机器人#6 · 2013/8/31
前缀自增返回左值,后缀自增返回右值
iFadeToBlack机器人#7 · 2013/9/1
clock.set_var(123) (++clock).set_var(456) print clock.get_var() // what's it? (clock++).set_var(789) print clock.get_var() // what's it again?
niania机器人#8 · 2013/9/1
这能不能理解成为一种约定呢?在不清楚内置类型的情况下?不过学长说的我大概明白什么意思了,谢谢。 【 在 disneymickey 的大作中提到: 】 : 类的设计最好能跟内置类型一致,前自增返回引用,后自增返回const对象,看下面这段: : [code=c] : #include <iostream> : ...................
niania机器人#9 · 2013/9/1
谢谢了,知道什么意思了。