1

我正在查看 Wrapper 类的 .h 文件。该类包含一个私有成员:

T* dataPtr;

(在T.htemplate < class T >文件顶部定义的位置)

该类提供了两种“*重载运算符”方法:

T& operator*()
{
   return *dataPtr;
}

const T& operator*() const
{
  return *dataPtr;
}

两者都简单地 return *dataPtr,但是*dataPtr用简单的英语,符号 "" 实际上返回了什么?它如何与返回类型“ T&”匹配?

4

4 回答 4

6

返回类型 T& 表明您正在返回 T 对象实例的引用。dataPtr 是一个指针,您可以使用 *.

于 2009-05-10T19:39:12.077 回答
2

dataPtr 是指向某物的指针。

* 运算符取消对指针的引用,因此 *dataPtr 是(或者,您可以说“引用”或“引用”)指针对象,即 dataPtr 指向的东西。

T& 表示“对类型为 T 的对象的引用”(不要与 T* 混淆,后者表示“指向类型为 T 的对象的指针”)。

于 2009-05-10T19:40:45.757 回答
1

*DataPtr是 指向的实际数据DataPtr。两个运算符都返回对 的引用T引用是一种类型,您应该将其视为它所引用的值的另一个名称。“在引擎盖下”,它类似于指针,但不要这样想。它不能进行指针数学运算,也不能“重新安装”。其中一个运算符 isconst和用于const对象,另一个用于普通对象。

于 2009-05-10T19:41:29.000 回答
1

包装类似乎就像一个 C++ 指针。

运算符 * 取消引用包装器,该包装器将评估它存储的东西(在 dataPtr 中)。你得到的是对这个内容的引用。例如,您可以将某些内容分配给参考

*intWrapper = 42;

有两个运算符,因为有一个常量和一个非常量版本。当你取消引用一个常量包装类时,你不能分配给它(一个常量引用(T&)被返回)

于 2009-05-10T19:41:34.117 回答