基于constness重载

时间:2012-07-22 04:08:04

标签: c++ const

我正在阅读Essential C ++。在4.3节中,作者给出了一个例子 解释 const

的用法
class val_class {
public:
    val_class(const BigClass &v)
        : _val(v) {}

    const BigClass& val() const {return _val;}
    BigClass& val() {return _val;}
};

void example(const BigClass *pbc, BigClass &rbc)
{
    pbc->val();
    rbc.val();
}

在上面的代码段中,作者基于constness重载函数val。 然后pbc->val()将调用const实例,rbc.val()将调用非const实例。

pbc BigClass 类型的const指针。我们如何保证 BigClass 具有成员函数 val ?是否应在示例函数中用 val_class 替换 BigClass

2 个答案:

答案 0 :(得分:2)

必须是:Your Full Example

这显然只是书中的一个错字。正如您自己想象的那样,example函数应如下所示

void example(const val_class *pbc, val_class &rbc)
{
    pbc->val();
    rbc.val();
}

答案 1 :(得分:0)

必须替换,因为BigClass无法从val_class派生val_class无法将referenceconst-reference存储到BigClass对象,因为代码在这种情况下不会编译,因此它只能存储BigClass个对象,然后BigClass无法从val_class派生,因为无法存储未声明/非完整声明类型的对象。