题
我在看一个包装类的.h文件。和类包含一个私有成员:
T* dataPtr;
(其中T
是如在.h文件的顶部定义template < class T >
)
在类提供了两个 “*重载操作者” 的方法:
T& operator*()
{
return *dataPtr;
}
const T& operator*() const
{
return *dataPtr;
}
这两个简单的返回*dataPtr
,但到底是什么符号“*dataPtr
”实际上返回,用简单的英语?它是如何适应与返回类型“T&
”?
解决方案
返回类型T&指出要返回为T对象的实例的引用。 dataPtr是一个指针,使用它你“解引用”(获得一个指针的参考值/实例)*。
其他提示
dataPtr是指向东西。
*运算符取消引用指针,所以* dataPtr是(或,而不是“是”,则可以说“是指”或“是一个参考”)的指针对象,即dataPtr指向的事情。
T&装置(不与T *这意味着“一个指向一个对象,其类型为T”相混淆)“到一个对象,其类型为T的参考”。
*DataPtr
是实际的数据通过DataPtr
指向。无论是运营商返回一个参考T
。 A 引用的是,你应该想到像另一个名称为价值是指一个类型。 “引擎盖下”,它类似于一个指针,但不要以为这样的说法。它不能做指针运算,或进行“重新插拔一下。”一个运营商的是const
和const
对象上被使用,并且另一种是正常的对象上使用。
在包装类似乎表现得象一个C ++指针。
运算符*解引用这将计算为它存储(在dataPtr)事物的包装。你得到的是这种内容的参考。例如。可以分配的东西到参考
*intWrapper = 42;
有两个操作者,因为有一个恒定和非恒定的版本。当取消引用恒定包装类,就不能分配给它(const引用(T&)被返回)
不隶属于 StackOverflow