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,编译器会对此抱怨,是的。