可能重复:
What is the meaning of a const at end of a member function?
about const member function
我在下面找到了一个函数原型:
const ClassA* ClassB::get_value() const
上述声明表示什么?我可以更改ClassA对象的成员吗?
答案 0 :(得分:2)
第一个const意味着它返回的是一个指向const A的指针。所以不,你不能改变它返回的内容(除非你抛弃了const-ness,如果它返回的对象实际上会给出未定义的行为定义为const
,而不是返回一个const
指针指向一个本身未定义为const
的对象。)
第二个const意味着get_value
不能改变调用它的ClassB
的任何(不可变)状态(除其他外,它是传递的,所以{{1} }只能调用ClassB::get_value
合格的其他成员函数。
答案 1 :(得分:1)
没有
该函数返回的ClassA指针标记为const
。这意味着你不应该改变它的任何值。
不会不可能更改值,因为有多种方法可以绕过const
标记,但您显然不是意味着改变它。
答案 2 :(得分:1)
上述声明表示什么?我可以更改ClassA对象的成员吗。
get_value
是ClassB
的const成员函数,因此它无法在其定义中修改ClassB
的任何非可变数据成员。但它可以修改ClassA
例如,以下编译(泄漏内存,但这不是一个问题)
struct A{
int x;
};
struct B
{
const A* get_value() const
{
A *p= new A;
p->x = 12;
return p;
}
};
答案 3 :(得分:0)
get_value()
是只读函数,不会修改调用它的ClassB
对象。它返回指向ClassA
对象的只读指针。您可以使用const_cast
通过丢弃其常量来修改此对象指向的对象。但理想的做法是制作这个对象的副本并改变它。