【问题标题】:Returning a reference from a function in c++从 C++ 中的函数返回引用
【发布时间】:2016-08-17 08:45:14
【问题描述】:

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

假设我们得到了

T *p;

此函数应返回对T 对象的引用。但它返回*p,所以它返回一个它指向的值。那么我们写T& operator...还是T operator...有区别吗?

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

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

【问题讨论】:

    标签: c++ function pointers return


    【解决方案1】:

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

    如果你通过引用返回(T& operator...),你将返回对象的地址(最后和返回一个指针很相似T*,它的成本是一样的,只是使用引用的语法不同比使用指针的语法)。如果调用者修改了返回的引用对象,它将影响您的属性变量(但是,使引用返回const T& 会阻止这种情况)。

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

    在此处阅读更多信息:What are the differences between a pointer variable and a reference variable in C++?

    【讨论】:

      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2014-01-23
      • 2022-11-24
      • 2014-12-05
      • 2016-08-28
      • 2011-03-26
      相关资源
      最近更新 更多