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

Posted

技术标签:

【中文标题】C++中关于&运算符的问题【英文标题】:Question About & operator in 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&”匹配?

【问题讨论】:

【参考方案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&)被返回)

【讨论】:

以上是关于C++中关于&运算符的问题的主要内容,如果未能解决你的问题,请参考以下文章

Java中关于位运算的面试题

php中关于&& or 的用法???

C++中关系运算符的效率问题

JAVA中关于相等运算符(兼容操作数)的查询

C语言中逻辑运算符(&&和||)中存在的真假问题

嵌套作用域中关于作用域运算符