《转》return *this和 return this有什么区别?

《转》return *this和 return this有什么区别?

别跟我说 return *this 表示返回当前对象,return this 表示返回当前对象的地址(指向当前对象的指针)。

正确答案为:return *this 返回的是当前对象的克隆或者本身(若返回类型为A,则是克隆,若返回类型为A&,则是本身)。

return this 返回当前对象的地址(指向当前对象的指针),下面我们来看看程序:

1 #include

2 using namespace std;

3

4 class A

5 {

6 public:

7 int x;

8 A* get()

9 {

10 return this;

11 }

12 };

13

14 int main()

15 {

16 A a;

17 a.x = 4;

18

19 if(&a == a.get())

20 {

21 cout << "yes" << endl;

22 }

23 else

24 {

25 cout << "no" << endl;

26 }

27

28 return 0;

29 }

结果为yes。

再看:

1 #include

2 using namespace std;

3

4 class A

5 {

6 public:

7 int x;

8 A get()

9 {

10 return *this; //返回当前对象的拷贝

11 }

12 };

13

14 int main()

15 {

16 A a;

17 a.x = 4;

18

19 if(a.x == a.get().x)

20 {

21 cout << a.x << endl;

22 }

23 else

24 {

25 cout << "no" << endl;

26 }

27

28 if(&a == &a.get())

29 {

30 cout << "yes" << endl;

31 }

32 else

33 {

34 cout << "no" << endl;

35 }

36

37 return 0;

38 }

结果为:

4

no //可见返回的是当前对象的副本

最后,如果返回类型是A&,那么return *this 返回的是当前对象本身(也就是其引用),而非副本。

转自:https://blog.csdn.net/stpeace/article/details/22220777

相关推荐

睾酮多久能恢复正常值
365bet足球数据直播

睾酮多久能恢复正常值

📅 07-10 👁️ 2404
UC手机浏览器为什么无法下载
外勤365老版本下载怎样下载

UC手机浏览器为什么无法下载

📅 07-06 👁️ 6135
古代行军打仗所插的军旗都代表什么意义?
外勤365老版本下载怎样下载

古代行军打仗所插的军旗都代表什么意义?

📅 07-21 👁️ 4637