【问题标题】:Question About & operator in C++C++中关于&运算符的问题
【发布时间】:2009-05-10 19:34:20
【问题描述】:

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

T* dataPtr;

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

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

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

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

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

【问题讨论】:

    标签: c++ pointers wrapper


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      dataPtr 是指向某物的指针。

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          包装类看起来就像一个 C++ 指针。

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

          *intWrapper = 42;

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-07-20
            • 2011-04-17
            • 1970-01-01
            • 1970-01-01
            • 2011-11-20
            • 2011-08-12
            • 1970-01-01
            相关资源
            最近更新 更多