Warum kann eine const-Methode keine Nicht-const-Referenz zurückgeben?

Warum wird die Methode nichtgetRanks() unten kompilieren, und wie kann ich es ordnungsgemäß beheben?

Ich möchte lediglich eine Member-Accessor-Methode definieren, die einen Verweis auf ein Member zurückgibt. Die Referenz ist nichtconst da könnte ich wohl ändern worauf es sich später bezieht. Da die member-Methode das Objekt jedoch nicht ändert, deklariere ich esconst. Der Compiler (clang, std = c ++ 11) besteht dann darauf, dass es eine "Binding of Reference" gibt, die "Qualifiers" löscht. Aber ich lasse keine Qualifikanten fallen, oder? Und wenn ja, warum:

struct teststruct{
  vector<int> ranks;
  vector<int>& getRanks()const{
    return ranks;
  }
};

Der Code wird jetzt kompiliert, wenn ich die return-Anweisung ändere, um die const wegzuwerfen:

return const_cast<vector<int>&>(ranks);

Aber "Ränge" sollten in erster Linie nicht const sein, ich verstehe nicht, warum ich const_cast die const weg muss. Ich weiß nicht einmal, ob das sicher ist.

Wie auch immer, gibt es einen Reiniger, um diese Methode zu schreiben? Kann jemand erklären, warum eine so einfache Methode des gesunden Menschenverstands fehlschlägt? Ich möchte das erklärengetRanks() Methode "const"damit ich es von anderen nennen kannconst Methoden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage