从 c++ 中的函数返回引用
Returning a reference from a function in c++
我想问一下从函数返回指针的问题。
假设我们已经得到
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++中的指针变量和引用变量之间有什么区别?
相关文章:
- 寿命延长从函数返回引用
- 了解C++如何返回引用并绑定到引用
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 从类返回引用向量
- 使用unique_ptr并返回引用,或者我应该使用shared_ptr并在需要时制作副本
- 混淆C++从函数返回引用
- 两个相同的重载运算符[]一个返回引用
- 为什么向量的.at()成员函数返回引用而不是迭代器
- C++使用和返回引用
- 返回 T 引用的 Const 函子禁止赋值
- 返回引用是否也会延长其生存期?
- 如何返回引用,然后递增迭代器
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 我是否需要将 ref 与 make_pair 一起使用才能返回引用?
- 在 vector::at 返回引用后进行更改
- 为什么PyImport_ImportModule返回引用计数为 3 而不是 1 的 PyObject*
- 超出返回引用的单一实例生存期
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- C++ 运算符 += 重载返回引用
- 如何声明接受转发引用并返回引用或副本的函数模板