在getter中返回字符串引用的正确方法

时间:2017-09-16 18:12:12

标签: c++ syntax getter-setter

我有一个带有字符串属性的类,我的getter必须返回string&这些属性的值。

我设法做到这一点而没有出错的唯一方法是:

inline string& Class::getStringAttribute() const{
    static string dup = stringAttribute;
    return dup;
}

在C ++中编写返回私有字符串属性的字符串引用的getter的正确方法是什么?

这样做:

inline string& Class::getStringAttribute() const{
    return stringAttribute;
}

给我这个错误:

error: invalid initialization of reference of type ‘std::string& {aka std::basic_string<char>&}’ from expression of type ‘const string {aka const std::basic_string<char>}’

2 个答案:

答案 0 :(得分:2)

此处的问题是您将方法标记为const。因此,对象内部的状态不能改变。如果将别名返回到成员变量(在本例中为stringAttribute),则允许更改对象内部的状态(对象外部的代码可能会更改字符串)。

有两种可能的解决方案:或者只返回一个string,其中实际返回一个stringAttribute的副本(因此对象的状态保持不变)或者返回一个const字符串,其中包括调用方法不能改变stringAttribute的值。

此外,您可以从getStringAttribute()中删除const,但是任何人都可以更改stringAttribute的值,您可能想要也可能不想要它。

答案 1 :(得分:1)

返回副本或const引用:

std::string get() const         { return s_; }
const std::string& get() const  { return s_; }