Почему метод const не может вернуть неконстантную ссылку?
Почему не методgetRanks()
ниже компиляции, и как я могу это исправить изящно?
Все, что я хочу сделать, это определить метод доступа к элементу, который возвращает ссылку на член. Ссылка неconst
поскольку я вполне мог бы изменить то, к чему это относится позже. Но так как метод member не изменяет объект, я объявляю его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_cast констант прочь. Я даже не знаю, безопасно ли это делать.
Во всяком случае, есть ли уборщик, чтобы написать этот метод? Может кто-нибудь объяснить, почему такой простой метод здравого смысла не работает? Я хочу объявитьgetRanks()
метод "const
«так что я могу назвать это от другихconst
методы.