如何解决需要澄清const成员函数
| 我对为什么编译和运行此代码有些困惑: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成员函数表示什么的认识上存在差距。
如果有人可以帮助我缩小差距,我将不胜感激。
解决方法
不,成员是一个
int* const
(从const函数看),这是完全不同的。
指针是const,而不是指向的对象。
,成员函数的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!
}
,该函数按值返回整数指针-您无法通过此值更改作为其副本的类成员,因此不存在违反const的情况。
,像您一样,在函数声明之后加上const
会告诉编译器“嘿,我保证不会修改*this
!\”。您的方法只是一个访问器。
参见C ++ FAQ LITE 18.10
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。