问题关于& C ++中的运算符

时间:2009-05-10 19:34:21

标签: c++ pointers wrapper

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

T* dataPtr;

(其中T与.h文件顶部定义的template < class T >相同)

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

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

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

两者都只返回*dataPtr,但是“*dataPtr”符号实际上以简单的英语返回了什么?它如何适合返回类型“T&”?

4 个答案:

答案 0 :(得分:6)

返回类型T&amp;声明您正在返回T对象实例的引用。 dataPtr是一个指针,您可以使用*“取消引用”(获取指针的引用值/实例)。

答案 1 :(得分:2)

dataPtr是指向某事物的指针。

*运算符取消引用指针,因此* dataPtr是(或者,而不是'is',你可以说'引用'或'是对'的引用')指针对象,即dataPtr指向的东西。

T&安培;表示'对类型为T'的对象的引用(不要与T *混淆,这意味着'指向类型为T'的对象的指针)。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

运算符*取消引用包装器,它将评估它存储的东西(在dataPtr中)。你得到的是对这些内容的引用。例如。你可以为参考文献指定一些东西

*intWrapper = 42;

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