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】:*DataPtr
是DataPtr
指向的实际数据。两个运算符都返回对T
的引用。 reference 是一种类型,您应该将其视为它所引用的值的另一个名称。 “在引擎盖下”,它类似于指针,但不要这样想。它不能进行指针数学运算,也不能“重新安装”。其中一个运算符是const
,用于const
对象,另一个用于普通对象。
【讨论】:
【参考方案4】:包装类看起来就像一个 C++ 指针。
Operator * 取消引用包装器,该包装器将评估它存储的东西(在 dataPtr 中)。你得到的是对这个内容的引用。例如。你可以为参考分配一些东西
*intWrapper = 42;
有两个运算符,因为有常量和非常量版本。当你取消引用一个常量包装类时,你不能分配给它(一个常量引用(T&)被返回)
【讨论】:
以上是关于C++中关于&运算符的问题的主要内容,如果未能解决你的问题,请参考以下文章