成员函数如何理解通过取消引用const指针获得对象?

no *_*ver 2 c++ pointers const class

我创建了一个const指针,该指针指向动态分配的abject实例。我无法理解对象本身是否是const。

首先,我试图通过使用指针来调用非常量成员函数,这正如预期的那样会导致编译错误,因为(这是我的解释,不知道它是否为真)该成员函数创建的指针被分配给了该const指针。它没有产生任何东西。

其次,我尝试取消引用指针并调用该非const成员函数。我认为成员函数现在创建的this指针将不再是const指针,因为compile无法知道p(即*p)返回的对象是否由const指针返回。原来我错了。

成员函数如何理解这一点?

#include<iostream>

class A
{
    int a=4;
public:
    A()
    {}

 void   print()
    {
        std::cout<<a<<std::endl;
    }
};


int main()
{
    const A* p = new A();  

   p->print(); //1 causes compile error
   (*p).print(); //2 causes compile error


  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为标记为2的行不会产生编译错误。它会导致编译错误。错误消息是:

"a.cpp: In function ‘int main()’:
a.cpp:21:13: error: passing ‘const A’ as ‘this’ argument discards qualifiers [-fpermissive]
    p->print(); //1 causes compile error
             ^
a.cpp:10:9: note:   in call to ‘void A::print()’
  void   print()
         ^~~~~
a.cpp:22:15: error: passing ‘const A’ as ‘this’ argument discards qualifiers [-fpermissive]
    (*p).print(); //2 causes compile error
               ^
a.cpp:10:9: note:   in call to ‘void A::print()’
  void   print()
         ^~~~~
Run Code Online (Sandbox Code Playgroud)

Run Code Online (Sandbox Code Playgroud)

Sne*_*tel 5

变量具有类型,因此可以是const或非const,但是表达式也具有类型。的类型(*p)const A,您不能调用const类型的非const方法。