我在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; }
我看到第一个例子返回一个引用,第二个返回一个解引用的指针(值)?这两个函数如何具有相同的函数体?
答案 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的副本。