在返回类型旁边使用"&"时,您是返回引用,还是仍然是逐位复制?
When using a '&' next to the return type, are you returning a reference, or is it a bit-by-bit copy still?
当在返回类型旁边使用'&'时,您是返回引用,还是仍然是逐位复制?
的例子:
T& operator[](const int index)
{
return m_array[index];
}
没有复制m_array[index] -返回的是对它的引用变量
您永远不会"返回引用"。对于那些希望了解更多的人来说,这是一种常见的表达方式,但如果您是新手或不确定,那么准确一点是值得的:实际情况是对函数求值会产生一个值。值有类型,而这些类型总是对象类型(即永远不会引用)。所以函数不能"返回引用";函数总是"返回一个值",如果你愿意的话。(但最好说"函数求值产生一个值"。)
唯一的问题是这个值是什么。如果一个函数被声明为U f()
,其中U
是一个对象类型,那么这个值就是一个临时值,它是通过复制传递的(至少名义上是这样)。但是,如果函数声明为U & f()
或U && f()
,则值是某个现有对象,并且不会创建和传递新对象。如果您愿意,这样的函数求值可以让您直接看到某些现有对象。通俗地说,我们说"f
返回一个引用",但是要小心使用这种语言。
在你的例子中,m_array
是一个已经存在的对象,m_array[index]
(大概)是该对象的某个子对象,函数求值产生那个对象(大概是某个数组元素)。
当在返回类型旁边使用'&'时,您是返回一个引用,还是它仍然是一个逐位复制?
返回对函数return
语句指定的任何对象的引用(因此不应该是临时的,因为前面的m_
暗示它不全是好的)。
返回对对象的引用并不是"逐位复制"的对立面…c++经常使用自定义复制构造函数和/或赋值操作符来确保正确的深度复制等。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- std::iterator::reference 必须是引用吗?
- 为什么单例使用指针而不是引用?
- 在C++,重复申报仍然是一个问题吗?
- "Memory Fragmentation"这仍然是一个问题?
- 将基本类型数组中的内存重新用于不同(但仍然是基本)类型的数组合法吗
- 为什么 (-i) 的类型(其中 i 是无符号的 int)仍然是无符号的 int?
- 为什么基于范围的 for 循环中的结构化绑定只是一个副本而不是引用?
- 更新 g++ 但仍然是旧版本
- 为什么设置/get_default_resource使用指针而不是引用?
- boost_asio_handler_invoke_helpers::invoke 是否仍然是在 boost asio
- 是转发参考是否仍然是RVALUE参考
- 当 ParamType 既不是指针也不是引用时自动类型推断
- 为什么在调用析构函数后仍然可以引用堆分配的对象
- 将字符串转换为整数。为什么会出现此错误?我想将 ID(字符串)更改为 IC(整数)。两者都是数组。顺便说一句,我仍然是初学者
- 派生类仍然是抽象的
- Qprocess启动的嵌套远程过程仍然是僵尸
- 模板参数是否可以是引用类型?
- 是shared_ptr的引用仍然是一个指针
- 在返回类型旁边使用"&"时,您是返回引用,还是仍然是逐位复制?