c++ - 函数返回中const T&和T的区别

标签 c++ constants return-value

我对函数返回中的 const T& 和 T 感到困惑。

比如我有一个A类:

class A {
  private:
    vector<T> my_vector_;
  public:
    T fun1() {
      return my_vector_.at(0);
    }
    const T& fun2() {
      return my_vector_.at(0);
    }
}

然后,

Class A a;
T b = a.fun1();
const T& c = a.fun1();
const T& d = a.fun2();

这三种情况有什么区别?谢谢。

最佳答案

T b = a.fun1();

此处,b 持有 vector 位置 0 处元素的拷贝。也就是说,对前者所做的任何修改都不会影响后者。

const T& c = a.fun1();

fun1 按值返回了一个对象,并且您使用了对 const 的引用来引用它。考虑到这一点,该物体确实是“漂浮在太空中”。它的生命周期将绑定(bind)到 c 的生命周期,但仍然不是 vector 的原始拷贝。

const T& d = a.fun2();

fun2 将对 const 的引用返回到 vector 内部的元素,并且您将 d 绑定(bind)到它。从现在开始,后者是前者的别名。

关于c++ - 函数返回中const T&和T的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22996042/

相关文章:

c++ - 内置 CArray 的 CMap

python - Boost Python找不到dll文件

c++ - 不同引用限定符重载运算符结果的类型特征

java - 如何在 Jasmin 中创建数据池?

c++ - C++ 中带有 std::vector 的 const

javascript - 使用 javascript 限定符时 safari 和 chrome 之间的不同行为 `const`

c - 双尾递归需要解释

python - Python 中缺少必需的位置参数

Java 代码返回 null 而不是字符串

c++ - 为什么 Visual Studio 找不到我的 DLL?