转载:return *this和return this

时间:2022-03-24 04:24:13

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

正确答案为:return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 )。return this返回当前对象的地址(指向当前对象的指针), 下面我们来看看程序吧:

  1. #include <iostream>
  2. using namespace std;
  3. class A
  4. {
  5. public:
  6. int x;
  7. A* get()
  8. {
  9. return this;
  10. }
  11. };
  12. int main()
  13. {
  14. A a;
  15. a.x = 4;
  16. if(&a == a.get())
  17. {
  18. cout << "yes" << endl;
  19. }
  20. else
  21. {
  22. cout << "no" << endl;
  23. }
  24. return 0;
  25. }

结果为:yes

再看:

  1. #include <iostream>
  2. using namespace std;
  3. class A
  4. {
  5. public:
  6. int x;
  7. A get()
  8. {
  9. return *this; //返回当前对象的拷贝
  10. }
  11. };
  12. int main()
  13. {
  14. A a;
  15. a.x = 4;
  16. if(a.x == a.get().x)
  17. {
  18. cout << a.x << endl;
  19. }
  20. else
  21. {
  22. cout << "no" << endl;
  23. }
  24. if(&a == &a.get())
  25. {
  26. cout << "yes" << endl;
  27. }
  28. else
  29. {
  30. cout << "no" << endl;
  31. }
  32. return 0;
  33. }

结果为:

4

no

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