Was ist der Unterschied zwischen string::at und string::operator[]?
Lesezeit: 2 Minuten
ayane_m
Mir wurde beigebracht string::at in der Schule, aber als ich die Saitenbibliothek durchstöberte, sah ich string::operator[]die mir noch nie gezeigt wurde.
Ich benutze jetzt operator[] und nicht verwendet at seit, aber was ist der Unterschied? Hier ist ein Beispielcode:
std::string foo = "my redundant string has some text";
std::cout << foo[5];
std::cout << foo.at(5);
Sie sind in Bezug auf die Ausgabe im Wesentlichen gleich, aber gibt es einige subtile Unterschiede, die mir nicht bekannt sind?
Haben Sie versucht, eine Referenz für jeden? Es gibt einen Unterschied, der beim Vergleich von Referenzen ziemlich leicht zu erkennen sein sollte.
– Chris
5. Februar 2013 um 2:13 Uhr
Warten Sie, Sie haben sich entschieden, von zu wechseln .at() zu operator[]Vor Blick in ein Buch oder eine Online-Referenz?
– us2012
5. Februar 2013 um 2:15 Uhr
Nun, ich lese Operator[] war schneller, wusste aber nicht warum…
– ayane_m
5. Februar 2013 um 16:57 Uhr
Jack
Ja, es gibt einen großen Unterschied: die Verwendung .at() führt eine Bereichsprüfung für den übergebenen Index durch und löst eine Ausnahme aus, wenn er über dem Ende der Zeichenfolge liegt, während operator[] bringt nur undefiniertes Verhalten in dieser Situation.
Karthik T
atmacht Bounds CheckingAusnahme des Typs std::out_of_range wird bei ungültigem Zugriff ausgelöst.
operator[]überprüft NICHT Grenzen und kann daher gefährlich sein, wenn Sie versuchen, über die Grenzen der Zeichenfolge hinaus zuzugreifen. Es ist ein wenig schneller als at obwohl.
std::string::at
Gibt eine Referenz auf das Zeichen an der angegebenen Position pos zurück. Es wird eine Begrenzungsprüfung durchgeführt, eine Ausnahme vom Typ std::out_of_range wird bei ungültigem Zugriff ausgelöst.
string::operator[]
Gibt eine Referenz auf das Zeichen an der angegebenen Position pos zurück. Es wird keine Begrenzungsprüfung durchgeführt. Es ist ein undefiniertes Verhalten für den Zugriff außerhalb der Grenzen operator[].
string::operator[] sollte etwas schneller sein als std::string::at
Haben Sie versucht, eine Referenz für jeden? Es gibt einen Unterschied, der beim Vergleich von Referenzen ziemlich leicht zu erkennen sein sollte.
– Chris
5. Februar 2013 um 2:13 Uhr
Warten Sie, Sie haben sich entschieden, von zu wechseln
.at()
zuoperator[]
Vor Blick in ein Buch oder eine Online-Referenz?– us2012
5. Februar 2013 um 2:15 Uhr
Nun, ich lese Operator[] war schneller, wusste aber nicht warum…
– ayane_m
5. Februar 2013 um 16:57 Uhr