返回信息流Clock& operator++()与Clock operator++(int)分别是前置和后置++,不太明白&的作用是什么,虽然知道一个是返回类本身,一个是副本,但还是不知道&和这有什么关系,希望各位能详细说下,谢谢。
这是一条镜像帖。来源:北邮人论坛 / cpp / #73554同步于 2013/8/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
大二学弟问问重载符运算的问题
niania
2013/8/31镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
&是引用的意思,就是返回对象本身,++操作是对对象本身的操作,而不是对对象复制的操作,就像 int & a=b,a和b是指向同一个内存的,就像函数传参(int &a)传入的也是实参的本身,而不是实参的一个复制,建议自己查查++的源代码,会比较清晰
【 在 ghoulchu 的大作中提到: 】
: &是引用的意思,就是返回对象本身,++操作是对对象本身的操作,而不是对对象复制的操作,就像 int & a=b,a和b是指向同一个内存的,就像函数传参(int &a)传入的也是实参的本身,而不是实参的一个复制,建议自己查查++的源代码,会比较清晰
但我把它去掉按书上例题,效果是一样的,为什么呢。
【 在 ghoulchu 的大作中提到: 】
: &是引用的意思,就是返回对象本身,++操作是对对象本身的操作,而不是对对象复制的操作,就像 int & a=b,a和b是指向同一个内存的,就像函数传参(int &a)传入的也是实参的本身,而不是实参的一个复制,建议自己查查++的源代码,会比较清晰
但我把它去掉按书上例题,效果是一样的,为什么呢。
【 在 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),与内置类型才能一致
【 在 niania 的大作中提到: 】
: 但我把它去掉按书上例题,效果是一样的,为什么呢。
你看一下去除&前后,函数的两个返回对象是否是在同一个内存地址里,个人认为不是在同一个内存地址中。
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?
这能不能理解成为一种约定呢?在不清楚内置类型的情况下?不过学长说的我大概明白什么意思了,谢谢。
【 在 disneymickey 的大作中提到: 】
: 类的设计最好能跟内置类型一致,前自增返回引用,后自增返回const对象,看下面这段:
: [code=c]
: #include <iostream>
: ...................