考虑以下代码片段:

class A
{
public:

    void nonConstFun()
    {

    }
};

class B
{
private:

    A a_;
    A * pA_;

public:

    void fun() const
    {
        pA_->nonConstFun();
        //a_.nonConstFun(); // Gives const related error
    }
};

int main()
{
    B b;
    b.fun();
}

在这里,我期望编译器由于缺乏恒定性而无法编译,而与A对象的类型无关,因为它缺乏在A::nonConstFun()中调用B::fun()的一致性。

但是,编译器抱怨对象,而不是指针。为什么?
我在Windows 10上使用VS2017。

最佳答案

它被强制执行。

如果尝试更改指针,编译器将不允许您使用。

但是,指针指向的是另一种对话。

请记住,T* constT const*不是同一件事!

您可以通过将其实际设置为A const*或仅通过以适当的方式编写函数来保护它。

10-04 10:36