c++;函数返回这个 我在StAcExpRoad中看到这个例子,关于在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; } };

c++;函数返回这个 我在StAcExpRoad中看到这个例子,关于在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; } };,c++,C++,现在我不明白怎么做了 myclass& ReturnReferenceToCurrentObject() { return *this; } 不能与相同 myclass ReturnCopyOfCurrentObject() const { return *this; } 在我看来,第一个示例返回一个引用,第二个示例返回一个取消引用的指针(值)?这两个函数如何具有相同的函数体 在我看来,第一个示例返回一个引用,第二个示例返回一个取消引用的指针(值) 没错。第一个函数返回对调用它的对象

现在我不明白怎么做了

myclass& ReturnReferenceToCurrentObject() { return *this; }
不能与相同

myclass ReturnCopyOfCurrentObject() const { return *this; }
在我看来,第一个示例返回一个引用,第二个示例返回一个取消引用的指针(值)?这两个函数如何具有相同的函数体

在我看来,第一个示例返回一个引用,第二个示例返回一个取消引用的指针(值)

没错。第一个函数返回对调用它的对象的引用;第二个返回该对象的副本

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

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

在我看来,第一个示例返回一个引用,第二个示例返回一个取消引用的指针(值)

没错。第一个函数返回对调用它的对象的引用;第二个返回该对象的副本

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


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

理解差异,有助于考虑一个更简单的例子。让;假设有两个独立的函数

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

int & g()
{
   static int x;
   return x;
}
正如您所看到的,这两个函数都有相同的body和return语句

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

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

g() = 10;
函数体中定义的变量x将被更改


在第一种情况下,你不能也不能这样做。在这种情况下,创建一个临时int对象,它是变量x.< /p>的副本,以理解它的区别,考虑一个更简单的例子将是有益的。让;假设有两个独立的函数

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

int & g()
{
   static int x;
   return x;
}
正如您所看到的,这两个函数都有相同的body和return语句

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

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

g() = 10;
函数体中定义的变量x将被更改


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

给定
int*p
,您是否了解
int x=*p
int&x=*p
也是允许的?第一个做拷贝
myclass
也一样;它将执行复制。这是一个语法问题。在C++中没有“使引用”操作符模拟“取地址”操作符。引用被设计成好像它们是对象本身一样。给定
int*p
,您是否理解
int x=*p
int&x=*p
也是允许的?第一个做拷贝
myclass
也一样;它将执行复制。这是一个语法问题。在C++中没有“使引用”操作符模拟“取地址”操作符。引用被设计为看起来就像它们是对象本身一样。