c ++函数如何返回这个

时间:2014-03-10 11:51:18

标签: c++

我在stackoverflow的回答中看到了这个例子,关于在c ++函数return “this” in C++?中返回它,其中问题是如何处理返回,这是在c ++中处理的。最好的答案是

class myclass {
  public:
  // Return by pointer needs const and non-const versions
     myclass* ReturnPointerToCurrentObject() { return this; }
     const myclass* ReturnPointerToCurrentObject() const { return this; }

  // Return by reference needs const and non-const versions
     myclass& ReturnReferenceToCurrentObject() { return *this; }
     const myclass& ReturnReferenceToCurrentObject() const { return *this; }

  // Return by value only needs one version.
     myclass ReturnCopyOfCurrentObject() const { return *this; }
};

现在我不明白

myclass& ReturnReferenceToCurrentObject() { return *this; }

不能与

相同
myclass ReturnCopyOfCurrentObject() const { return *this; }

我看到第一个例子返回一个引用,第二个返回一个解引用的指针(值)?这两个函数如何具有相同的函数体?

2 个答案:

答案 0 :(得分:3)

  

我看到第一个例子返回一个引用,第二个返回一个解引用的指针(值)?

完全。第一个返回对它所调用的对象的引用;第二个返回该对象的副本。

  

这两个函数如何具有相同的函数体?

因为从返回表达式*this到返回值的转换是隐式的。在第一种情况下,它被转换为参考;在第二个中,它通过复制转换为值。

答案 1 :(得分:2)

要理解其中的差异,考虑一个更简单的例子将会有所帮助。让我们假设有两个独立的函数

int f()
{
   static int x;
   return x;
}

int & g()
{
   static int x;
   return x;
}

如您所见,这两个函数具有相同的正文和返回语句。

它们之间的区别在于,在第一种情况下,返回静态变量x的副本,而在第二种情况下,返回对静态变量x的引用。

因此,在第二种情况下,您可以执行以下操作

g() = 10;

和函数体中定义的变量x将被更改。

在第一种情况下,您可能不会也不能这样做。在这种情况下,会创建一个临时int对象,它是变量x的副本。