从 c++ 中的函数返回引用

Returning a reference from a function in c++

本文关键字:返回 引用 函数 c++      更新时间:2023-10-16

我想问一下从函数返回指针的问题。

假设我们已经得到

T *p;

此函数应返回对T对象的引用。但它返回*p因此返回它指向的值。那么我们写T& operator...T operator...没有区别吗?

   T& operator*() const{
        if(p)
            return *p;
        throw std::runtime_error("unbound");
    };

正常返回引用和值有什么区别?

如果返回一个值 ( T operator... ),你将返回一个新对象,一个 *p 的副本。如果调用方修改返回的对象,则不会影响属性变量。通过复制返回是有代价的(创建副本的 CPU 操作 + 复制对象的内存使用情况)。它还要求 T 能够(提供有效的复制构造函数)。

如果通过引用(T& operator...)返回,则返回对象的地址(最后,它与返回poinetr T*非常相似,它的成本相同,只是使用引用的语法与使用指针的语法不同)。如果调用者修改返回的引用对象,它将影响属性变量(但是,使引用返回const T&将阻止这种情况)。

引用

是可取的(在内存使用方面更快更好),只要您可以保证引用的变量在调用者将使用引用时保持活动状态。例如,如果要返回由函数创建的本地对象,则必须通过复制而不是引用返回该对象)。

在此处阅读更多内容:C++中的指针变量和引用变量之间有什么区别?