Ist cbegin / cend nicht genug für einen auf Schleife basierenden Bereich?

8

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.

    
Shadowigor 02.06.2017, 15:06
quelle

1 Antwort

8
  

Muss ich Anfang / Ende implementieren?

Ja.

  

Soweit ich es verstanden habe, sollte es cbegin/cend wählen, wenn es const auto &x und nicht auto &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) und end(__range) , wobei begin und end mit Argument gesucht werden abhängiges Nachschlagen ([basic.lookup.argdep]). Für die Zwecke dieser Namenssuche ist Namespace std ein zugehöriger Namespace.

    
R Sahu 02.06.2017, 15:23
quelle

Tags und Links