T*&返回类型到底是什么
What in the world is T*& return type
我一直在研究向量实现,偶然发现了一条线,让我困惑于作为一个天真的C++学习者。
- 什么是
T*&
返回类型? - 这仅仅是对指针的引用吗?
- 那为什么这会有用呢?
代码链接:https://github.com/questor/eastl/blob/56beffd7184d4d1b3deb6929f1a1cdbb4fd794fd/vector.h#L146
T*& internalCapacityPtr() EASTL_NOEXCEPT { return mCapacityAllocator.first(); }
它是对
- 类型为
T
的值的指针的引用,该值作为模板参数传递,或者更确切地说:- 存在一个
VectorBase<T>
实例,其中程序指定T
,T
可以是int
,string
或其他任何东西。 T
值作为向量中的项存在。- 可以创建指向该项的指针:
T* pointer = &this->itemValues[123]
- 然后,可以创建对此指针的引用:https://msdn.microsoft.com/en-us/library/1sf8shae.aspx?f=255&MSPPError=-2147217396
- 存在一个
- 正确
- 如果需要"间接"使用值,则引用到指针比指针到指针便宜,因为编译器/CPU 不需要执行双间接寻址。
http://c-faq.com/decl/spiral.anderson.html
这将是对 T 类型指针的引用。对指针的引用可能有点棘手,但在使用引用时会大量使用智能指针,从而将增量保存到引用计数器。
C++中的类型应从右到左读取。在此之后,它变为:对 T 指针的引用。所以你的假设是正确的。
对指针的引用非常有用,这通常用作输出参数或进出参数。让我们考虑一个特定的 std::swap 案例
template <typename T>
void swap(T*& lhs, T*& rhs) {
T *tmp = rhs;
rhs = lhs;
lhs = tmp;
}
与每种类型一样,它可以用作返回值。在状态库中,您可以找到std::vector<int *>::operator[]
的返回类型,允许v[0] = nullptr
。
在我参与的项目中,我还没有看到这种允许更改内部结构的 getter 的太多用法。但是,它确实允许您编写单个方法来读取和写入成员的值。
在我看来,我会称之为代码异味,因为它使理解哪些调用者进行了实际修改变得更加困难。 当返回对成员的 const 引用时,故事当然会有所不同,因为这可能会阻止副本。尽管阻止指针的复制不会增加价值。
相关文章:
- 返回类型在 C++ OOP 中是什么意思
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- T*&返回类型到底是什么
- c++运算符重载-我实际返回的操作数类型是什么
- 运算符和返回类型是什么意思?
- STD :: SETW,STD :: SETFILL等的真实返回类型是什么?
- const 在具有尾随返回类型的自动退货声明中是什么意思
- 返回可能在C++中分配在堆栈上的成员时,最佳指针/引用类型是什么
- C++协方差返回类型的缺点是什么
- 尾随返回类型中的占位符类型的用途是什么
- C++中以下函数的返回类型是什么
- 此函数的返回类型是什么
- 提升的返回类型是什么::apply_visitor(延迟版本)
- C 中构造函数的返回类型是什么
- 实际上什么返回类型有一个新的
- 是覆盖返回类型所需的指针-继承
- 解析是如何工作的,或者是什么使类型完整或不完整
- 在 S 被解析为 for(auto &s :text)后,S 应该是什么类类型?
- 在知道变量是什么数据类型之前如何声明它
- 指针赋值应该使用什么返回类型?