基于常量重载

overloaded based on constness

本文关键字:重载 常量 于常量      更新时间:2023-10-16

我正在阅读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();
}

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

pbcBigClass类型的常量指针。我们如何保证BigClass具有成员函数val?是否应将示例函数中的BigClass替换为val_class

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

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

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

必须替换,因为BigClass不能从val_class派生(val_class不能将referenceconst-reference存储到BigClass对象,因为在这种情况下代码不可编译,所以它只能存储BigClass对象,然后BigClass不能从val_class派生,因为不能存储未声明/未完全声明类型的对象)。