我有一个带有字符串属性的类,我的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>}’
答案 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_; }