恒定功能

时间:2011-03-18 04:58:31

标签: c++

  

可能重复:
  What is the meaning of a const at end of a member function?
  about const member function

我在下面找到了一个函数原型:

const ClassA* ClassB::get_value() const

上述声明表示什么?我可以更改ClassA对象的成员吗?

4 个答案:

答案 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_valueClassB的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通过丢弃其常量来修改此对象指向的对象。但理想的做法是制作这个对象的副本并改变它。