为什么下面的方法不能getRanks()
编译,我该如何优雅地修复它?
我想要做的就是定义一个返回成员引用的成员访问器方法。参考不是const
因为我稍后可能会修改它所指的内容。但是由于成员方法没有修改对象,所以我声明它const
。编译器(clang,std=c++11)然后坚持认为存在“删除限定符”的“引用绑定”。但我不会放弃预选赛,是吗?如果我是,为什么:
struct teststruct{
vector<int> ranks;
vector<int>& getRanks()const{
return ranks;
}
};
现在,如果我更改 return 语句以丢弃 const,则代码编译:
return const_cast<vector<int>&>(ranks);
但是“排名”首先不应该是 const ,我不明白为什么我需要 const_cast const 。我什至不知道这样做是否安全。
无论如何,有没有更清洁的人来写这个方法?有人可以解释为什么这种简单的常识方法会失败吗?我确实想声明getRanks()
方法“ const
”,以便我可以从其他const
方法调用它。