Почему метод 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 методы.

Ответы на вопрос(4)

Ваш ответ на вопрос