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

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

【热门文章】
【热门文章】