I'm a little confused as to why this code compiles and runs:
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;
}
Output of running this code is FFFFFFFF
as well... unexpected by me. Shouldn't this->b
return const int*
since it is in a const member function? and therefore the return
line should generate a compiler-cast error for trying to cast const int*
to int*
Obviously there's a gap here in my knowledge of what const member functions signify. I'd appreciate if someone could help me bridge that gap.
No, the member is an int* const
(as seen from the const function), which is totally different.
The pointer is const, not the object pointed to.
The const
part of a member function just says that the function is allowed to be called when the this
pointer (aka the object on which it is called) is const. It got nothing to do with the return value.
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!
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With