4

我对为什么这段代码编译和运行有点困惑:

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

4 回答 4

4

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

指针是常量,而不是指向的对象。

于 2011-04-27T15:03:14.737 回答
2

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

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!

}

于 2011-04-27T15:02:00.860 回答
2

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

于 2011-04-27T15:02:37.987 回答
0

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

请参阅C++ FAQ LITE 18.10

于 2011-04-27T15:07:36.063 回答