Was ist der Unterschied zwischen string::at und string::operator[]?

Lesezeit: 2 Minuten

Benutzer-Avatar
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

Benutzer-Avatar
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.

Benutzer-Avatar
Karthik T

at macht 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

siehe die Hinweis

1012870cookie-checkWas ist der Unterschied zwischen string::at und string::operator[]?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy