Ich habe eine Klasse, nennen wir sie ConstVector, die nur cbegin / cend und nicht begin / end definiert, weil ich nach der Konstruktion keine Änderungen an ihren Membern zulassen will. Ich habe versucht, den Bereich für Schleife wie folgt zu verwenden:
%Vor%Während der relevante Teil der Klasse so aussieht:
%Vor%Aber mein Compiler beklagt sich:
%Vor% Meine Frage ist: Muss ich Anfang / Ende implementieren? So weit ich es verstanden habe, sollte es cbegin / cend wählen, wenn es const auto &x
und nicht auto &x
ist. Zumindest würde das für mich Sinn machen. Wenn ich meinen Bereich für die Schleife entferne, wird alles gut kompiliert.
Ich habe auch so ziemlich alles versucht hier , um const
zu machen, aber das hat nicht geholfen.
Muss ich Anfang / Ende implementieren?
Ja.
Soweit ich es verstanden habe, sollte es
cbegin/cend
wählen, wenn esconst auto &x
und nichtauto &x
ist.
So ist der bereichsbasierte for
im Standard nicht definiert. Bereichsbasierte for
sucht immer nach begin()
und end()
. Von Ссылка .
andernfalls sind begin-expr und end-expr jeweils
begin(__range)
undend(__range)
, wobeibegin
undend
mit Argument gesucht werden abhängiges Nachschlagen ([basic.lookup.argdep]). Für die Zwecke dieser Namenssuche ist Namespace std ein zugehöriger Namespace.
Tags und Links c++