C++ 关于返回属性的引用的问题...

查看:199
本文介绍了C++ 关于返回属性的引用的问题...的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

这两天学c++, 自己动手写一个类的时候, 类里面有个私有属性是cName 是string类型, 我写了下面这个函数准备用来获取这个名字, 然后编译发现报错了...

    inline std::string& getName() const {return cName;}

这是错误

error: binding value of type 'const basic_string<[3 * ...]>' to reference to type 'basic_string<[3 * ...]>' drops 'const' qualifier
    inline std::string& getName() const {return cName;}

然后我发现只要我在std::string&这个地方去掉取地址符就可以了, 这是为什么呢? 难道错误是在于不能返回这个string的引用吗? 因为我觉得就算返回这个string的引用, 也没关系啊, 毕竟这个函数的返回值只能作为右值... 所以这样为什么错了呢?

解决方案

因为在const成员函数里,不允许改变成员变量的值,相当于this指针指向的内容是const的,所以这里的cName其实是const的。

然后你把const类型绑定到一个引用上,这个引用也必须是const的,因为不能丢掉const的限定。这一点我是这么理解的,引用既然是别名,那绑定的类型总应该要对应吧

为什么直接返回string可以,是因为这里将调用string的拷贝构造函数,应该是这个:string(const string),cName作为它的参数,然后函数返回的是构造后的这个string

这篇关于C++ 关于返回属性的引用的问题...的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆