Ich bin etwas mit const_iterators verwirrt. Zum Beispiel wollen wir die Funktion betrachten:Warum Compiler ermöglicht einen Verweis auf Iterator in Funktion senden, die einen Verweis auf Const Iterator nimmt?
void functionForConstIterator(std::list<int> const& list, std::list<int>::const_iterator& const_iter)
{
const_iter = list.begin();
}
Jetzt kann ich schreiben:
void main()
{
std::list<int> myList = {1, 2, 3, 4, 5};
std::list<int> const& listRef = myList;
std::list<int>::iterator iter;
functionForConstIterator(listRef, iter);
*iter = 7;
for (auto it = myList.begin(); it != myList.end(); ++it)
std::cout << *it << " ";
}
Der Ausgang ist {7, 2, 3, 4, 5}. Warum? Wenn ich einen Const-Verweis auf einen Container bekomme, muss ich ihn nicht ändern. Dies ist Visual Studio 2015-Compiler.
Wenn ein Funktionsparameter ist eine konstante Referenz, die nur bedeutet, dass die Funktion, die sie nicht ändern können. Es wird nicht dazu führen, außerhalb der Funktion const zu sein. – JETM
[Ihr Code ist falsch] (http://coliru.stacked-crooked.com/a/1bc62e737a7e80f4) –
Aber es bedeutet, dass wenn ich nur const Referenz habe, nicht den Container selbst, ich kann es immer ändern. –