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的行不会产生编译错误。它会导致编译错误。错误消息是:
Run Code Online (Sandbox Code Playgroud)"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)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |