构造函数参数,仅当实例为const时才接受指向const的指针

时间:2019-06-08 03:01:16

标签: c++

让我说一堂课

class A{
    B* b;
public:
    A(B* pb):b(pb){}
}

并且我确保A的const方法永远不要修改b指向的对象。这样,当B const*的实例为const时,可以安全地持有A

B const b;
A a(&b); // compile error
A const ca(&b); // compile error too. How can I allow this one

1 个答案:

答案 0 :(得分:3)

这是不可能的-如果对象是(即将成为)const,构造函数甚至不能告诉,更不用说用信息控制重载了

标准的解决方法(通常用于迭代器)是使A成为模板(即使它只有两个专业化),并使用A<const B>处理这种情况。是的,这非常糟糕:部分原因是因为它可能会延迟某些诊断,但更多的原因是没有A<B>的自动转换(const A<const B>&也无法绑定到A<B>)。好消息是,即使A具有可以进行突变 b(在此公式中通常为const)的方法,该方法也不需要任何特殊的工作;除非使用,否则它们不会被实例化。