C++ 关于返回属性的引用的问题...
PHP中文网
PHP中文网 2017-04-17 13:55:05
[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的引用, 也没关系啊, 毕竟这个函数的返回值只能作为右值... 所以这样为什么错了呢?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
迷茫

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号