下面的方法
我只是想定义一个成员访问器方法,返回对成员的引用。该引用不是
现在,如果我更改返回语句以去除const,则代码将编译:
getRanks()
为什么不能编译?如何优雅地修复它?我只是想定义一个成员访问器方法,返回对成员的引用。该引用不是
const
的,因为我可能稍后修改它所引用的内容。但由于成员函数不会修改对象,所以我将其声明为const
。然而,编译器(clang,std=c++11)坚持认为存在“引用绑定”会“丢失限定符”的问题。但我没有丢失限定符,是吗?如果是,为什么呢?struct teststruct{
vector<int> ranks;
vector<int>& getRanks()const{
return ranks;
}
};
现在,如果我更改返回语句以去除const,则代码将编译:
return const_cast<vector<int>&>(ranks);
但是,“等级”一词本来就不应该是常量,我不明白为什么需要消除常量的const_cast。我甚至不确定这样做是否安全。
无论如何,有没有更简洁的方法来编写此方法?有人能解释为什么这样一个简单的常识方法会失败吗?我确实希望将getRanks()
方法声明为“const
”,以便我可以从其他const
方法中调用它。
teststruct const x; x.getRanks().emplace_back();
-> 未定义行为。 - dyp