考虑以下代码片段:
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* const
和T const*
不是同一件事!
您可以通过将其实际设置为A const*
或仅通过以适当的方式编写函数来保护它。