我在Mark Allen Weiss的数据结构书中遇到以下代码片段。常量引用包装
template <class Object>
class Cref
{
public:
Cref () : obj (NULL) { }
explicit Cref(const Object & x) : obj (&x) {
const Object & get() const
{
if (isNull())
throw NullPointerException() ;
else
return *obj;
}
bool isNull() const
(return obj == NULL; }
private:
const Object *obj;
};
所以这里的重点是分配空/初始化一个常量引用。但我不确定我了解以下内容: 1.我们用另一个常量引用x初始化一个常量引用。但为什么它又作为obj(& x)完成?常量对象&中的& x与obj中的& x不同(& x)?我看到这一点,但不清楚为什么应该如此。请解释一下。 2. get方法() - 我们尝试返回该类的私有成员obj的const引用。它已经是一个const引用。为什么返回* obj而不仅仅是obj? 3.为什么显式的关键字?如果发生隐式类型转换,会发生什么情况?有人可以为此提供一个场景吗?
由于
感谢您的澄清!特别是#2! :) – svk
关于#1,这意味着这是一个声明的事情。由于我们只能在实际将其分配给指针时声明一个类似于const Object & x;的const引用,所以ptr =&x就不可避免地完成了。我的理由是否正确? – svk
@SuprajaJayakumar:从逻辑的角度来看,一个参考文件基本上命名一个对象。也就是说,在构造函数中,传递给它的对象的名称为'x'(因为它是一个const引用,所以它是const的)。因此,您可以像使用该类型的变量一样使用'x'。为了得到一个指向变量的指针,你使用了addess-of运算符'&',因此你可以用'x'来完成。使用符号'&'定义引用的事实在逻辑上与此无关。如果他们决定为此使用关键字'ref',那就是一样了。 – celtschk