我对函数返回中的 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/