【发布时间】:2014-06-21 22:50:55
【问题描述】:
为什么下面的方法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);
但是“ranks”首先不应该是 const,我不明白为什么我需要 const_cast const 。我什至不知道这样做是否安全。
不管怎样,有没有更清洁的方法可以写这个方法?有人可以解释为什么这种简单的常识方法会失败吗?我确实想声明getRanks() 方法“const”,以便我可以从其他const 方法中调用它。
【问题讨论】:
-
teststruct const x; x.getRanks().emplace_back();-> UB.
标签: c++ c++11 reference constants const-cast