需要const成员函数澄清

时间:2011-04-27 14:59:37

标签: c++ const this member-functions

我对此代码编译和运行的原因感到有点困惑:

class A
{
private:
    int* b;
public:
    A() : b((int*)0xffffffff) {}
    int* get_b() const {return this->b;}
};

int main()
{
    A a;
    int *b = a.get_b();
    cout<<std::hex<<b<<endl;
    return 0;
}

运行此代码的输出也是FFFFFFFF ......我意外。 this->b不应该返回const int*因为它在const成员函数中吗?因此,return行应该生成编译器强制转换错误,以尝试将const int*强制转换为int*

显然,我对const成员函数的含义有所了解。 如果有人能帮我弥合这个差距,我会很感激。

4 个答案:

答案 0 :(得分:4)

不,该成员是int* const(从const函数中可以看出),这是完全不同的。

指针是const,而不是指向的对象。

答案 1 :(得分:2)

成员函数的const部分只是说当this指针(也就是调用它的对象)是const时,允许调用该函数。它与返回值无关。

class A{
public:
  void non_const_func(){}
  void const_func() const {}
};

int main(){
  A a;
  a.const_func(); // works
  a.non_const_func(); // works too

  const A c_a;
  c_a.const_func(); // works again
  c_a.non_const_func(); // EEEK! Error, object is const but function isn't!

}

答案 2 :(得分:2)

该函数按值返回一个整数指针 - 您不能通过此值更改它是副本的类成员,因此不存在const违规。

答案 3 :(得分:0)

在函数声明之后放置const就像告诉编译器“嘿,我保证不会修改*this!”。你的方法只是一个访问者。

请参阅C++ FAQ LITE 18.10