C++ 需要对const成员函数进行澄清

C++ 需要对const成员函数进行澄清,c++,constants,this,member-functions,C++,Constants,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; }

我对这段代码编译和运行的原因有点困惑:

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;
}
A类
{
私人:
int*b;
公众:
A():b((int*)0xffffffff){}
int*get_b()常量{返回此->b;}
};
int main()
{
A A;
int*b=a.get_b();

cout成员函数的
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!

}

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

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


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

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


右侧。这就解释了。因此,如果b是int并且get_b将尝试返回这个->b,那么我将得到转换错误。对吗?如果b是一个int,而您试图返回&b,编译器会对此抱怨,是的。