我对此代码编译和运行的原因感到有点困惑:
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成员函数的含义有所了解。 如果有人能帮我弥合这个差距,我会很感激。
答案 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
!”。你的方法只是一个访问者。