在这种情况下,为什么我不能将“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吗?

我试过在谷歌上搜索一个有同样问题的人一个小时,但我似乎无法正确地用词来找到类似的问题。

我正在尝试做的事情是可能的,还是我需要改变我的设计?

回答

doStuffconst因此b_也是const在这种情况下这样调用非constupdate函数是不允许的。

如果doStuff需要修改b_它不应该被标记const,你可以标记b_为,mutable但这很少是正确的做法。

  • `mutable` 唯一真正有效的用途是用于诸如缓存之类的事情,其中​​调用访问器方法(您希望它是 `const`)需要能够更新缓存值,因此该值需要是 `mutable` . 如果调用一个方法对类没有外部可见的更改,那么将其标记为 `const` 并在必要时具有 `mutable` 成员可能是合理的。`Bar` 是一个嵌套类,这种行为没有区别。

以上是在这种情况下,为什么我不能将“this”传递给内部类的方法?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>