我正在查看Wrapper类的.h文件。该类包含一个私有成员:
T* dataPtr;
(其中T
与.h文件顶部定义的template < class T >
相同)
该类提供了两个“*重载运算符”方法:
T& operator*()
{
return *dataPtr;
}
const T& operator*() const
{
return *dataPtr;
}
两者都只返回*dataPtr
,但是“*dataPtr
”符号实际上以简单的英语返回了什么?它如何适合返回类型“T&
”?
答案 0 :(得分:6)
返回类型T&amp;声明您正在返回T对象实例的引用。 dataPtr是一个指针,您可以使用*“取消引用”(获取指针的引用值/实例)。
答案 1 :(得分:2)
dataPtr是指向某事物的指针。
*运算符取消引用指针,因此* dataPtr是(或者,而不是'is',你可以说'引用'或'是对'的引用')指针对象,即dataPtr指向的东西。
T&安培;表示'对类型为T'的对象的引用(不要与T *混淆,这意味着'指向类型为T'的对象的指针)。
答案 2 :(得分:1)
*DataPtr
是DataPtr
指向的实际数据。两个运算符都返回对T
的引用。 引用是一种类型,您应该将其视为其引用的值的另一个名称。 “引擎盖下”,它类似于指针,但不要那么想。它不能做指针数学,也不能“重新安装”。其中一个运算符是const
,用于const
对象,另一个用于普通对象。
答案 3 :(得分:1)
包装器类似乎就像一个C ++指针。
运算符*取消引用包装器,它将评估它存储的东西(在dataPtr中)。你得到的是对这些内容的引用。例如。你可以为参考文献指定一些东西
*intWrapper = 42;
有两个运算符,因为有一个常量和一个非常量版本。当你取消引用一个常量包装类时,你不能赋值给它(返回一个const引用(T&amp;))