需要澄清const成员函数

| 我对为什么编译和运行此代码有些困惑:
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成员函数表示什么的认识上存在差距。 如果有人可以帮助我缩小差距,我将不胜感激。     
已邀请:
不,成员是一个
int* const
(从const函数看),这是完全不同的。 指针是const,而不是指向的对象。     
成员函数的
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!
}     
该函数按值返回整数指针-您无法通过此值更改作为其副本的类成员,因此不存在违反const的情况。     
像您一样,在函数声明之后加上
const
会告诉编译器“嘿,我保证不会修改
*this
!\”。您的方法只是一个访问器。 参见C ++ FAQ LITE 18.10     

要回复问题请先登录注册