在这种情况下,为什么我不能将“this”传递给内部类的方法?
我有一个包含内部类的类,它看起来有点像这样:
class Foo
{
class Bar
{
public:
void update(const Foo& f)
{
//Updates using public getters of Foo
}
};
public:
void doStuff() const
{
b_.update(*this);
}
private:
Bar b_;
};
该线路b_.update(*this)目前给我错误cannot convert 'this' pointer from 'const Foo::Bar' to 'Foo::Bar &'
这是为什么?该update方法的参数是 type const Foo&,这意味着它不可能修改Foo对象,如果它愿意的话。这不应该满足 const 方法doStuff吗?
我试过在谷歌上搜索一个有同样问题的人一个小时,但我似乎无法正确地用词来找到类似的问题。
我正在尝试做的事情是可能的,还是我需要改变我的设计?
回答
doStuff是const因此b_也是const在这种情况下这样调用非constupdate函数是不允许的。
如果doStuff需要修改b_它不应该被标记const,你可以标记b_为,mutable但这很少是正确的做法。
- `mutable` 唯一真正有效的用途是用于诸如缓存之类的事情,其中调用访问器方法(您希望它是 `const`)需要能够更新缓存值,因此该值需要是 `mutable` . 如果调用一个方法对类没有外部可见的更改,那么将其标记为 `const` 并在必要时具有 `mutable` 成员可能是合理的。`Bar` 是一个嵌套类,这种行为没有区别。