基于常量重载
overloaded based on constness
我正在阅读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()
将调用非常量实例。
pbc是BigClass类型的常量指针。我们如何保证BigClass具有成员函数val?是否应将示例函数中的BigClass替换为val_class?
必须是这样的:您的完整示例
这显然只是书中的一个错别字。正如您自己所想的,example
函数应该如下所示
void example(const val_class *pbc, val_class &rbc)
{
pbc->val();
rbc.val();
}
必须替换,因为BigClass
不能从val_class
派生(val_class
不能将reference
或const-reference
存储到BigClass
对象,因为在这种情况下代码不可编译,所以它只能存储BigClass
对象,然后BigClass
不能从val_class
派生,因为不能存储未声明/未完全声明类型的对象)。
相关文章:
- 什么时候可以使用常量装饰调用我的重载函数?
- 如何为非常量和常量重载实现一次成员函数?
- 一种优雅或至少可行的方法,用于使用和接受具有重载方法和运算符的不同大小的文字数组常量
- 重载模板化类的[]运算符的常量版本
- 获取对常量规范重载的成员函数的引用
- C++ 具有常量数组和initializer_list的重载构造函数
- 如何让编译器在C++中更喜欢常量方法重载?
- 重载、常量参数、const_cast、const_cast<字符串 &>
- 引用模板类型的赋值运算符需要非常量重载
- 封装 ublas 并将常量引用重载到 operator()
- 如何在 C++ 类中重载 'less than' 运算符以比较常量?
- 为什么重载"<<"需要一个常量参数?
- MSVC:推理指向具有常量和非常量重载的成员函数的指针
- 常量字符数组模板与字符常量* 函数重载
- 防止将临时传递为常量引用的方法,该方法比删除 r 值重载更好地缩放
- 函数重载与常量
- 重载常量和非常量转换运算符返回数组类型时出现 MSVC 错误 C2593
- 为什么要在具有多个参数的重载运算符+中传递常量引用
- 运算符 [] 重载常量引用二维指针
- 单元测试-在C++TDD中调用重载常量与非常量方法的好方法