C++ 如何返回一个类成员变量的引用
class P {};
class Foo {
protected:
P& getp() const;
private:
P m_bar;
};
P& Foo::getp() const {
return m_bar;
}
int main()
{
Foo f;
P p1 = f.getp()
}
上述代码在调用getp时编译出问题,但是把 P 换成 string 类型就没问题
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这里只是举个可行的方法 虽然const_cast不应该这样用.
至于你的写法为什么不能通过呢? 你必须知道
P& Foo::getp() const
中的const有无分别代表着什么:没有
const
时:this
指针在这里的类型是Foo*
. 为什么不是Foo* const
呢? 因为this不是lvalue(左值), 而是一个prvalue.N4713
8.2.1
cppreference
所以
this
在没有const
修饰时只能是T*
, 不能是T* const
.有const时:
this指针的类型就是
Foo const*
(或者是const Foo*
, 这两者是等价的). 从右往左读: pointer to const Foo. 意思就是:this->data_member = ...
是非法的.接下来的你的问题就很明显了. 因为你在函数后面用const修饰了, 所以this是
const Foo*
类型. 也就是说m_bar
是不可修改的, 如何保证这一点呢? 自然是返回值也是const啦. 这就是@araraloren 说的做法. 至于开头我说的那种做法, 就是去掉了const, 虽然在这里能解决, 不过可以说是bad practice.结论L:基础太薄弱,须加强练习。。