1

我正在阅读 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 实例。

pbcBigClass类型的const 指针。我们如何保证BigClass有一个成员函数val示例函数中的BigClass是否应该替换为val_class

4

2 回答 2

2

必须是这样:您的完整示例

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

void example(const val_class *pbc, val_class &rbc)
{
    pbc->val();
    rbc.val();
}
于 2012-07-22T04:17:17.250 回答
0

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

于 2012-07-22T04:21:12.930 回答