[] oder at()
-
Hallo zusammen,
was verwendet ihr in der Regel?
Die kürzere Adressierung per [], aber ohne Bereichsprüfung -> performanteroder
nehmt ihr bei at() den geringen Overhead zugunsten einer Bereichsprüfung in Kauf?
Gruß,
CSpille
-
[] ist sicher ein überladener operator, hinter dem sich alles mögliche verbergen kann.
d.h. wenn man nicht genau weiss, wie [] oder at() implementiert sind, kann man nicht sagen, welches davon eventuell schneller ist.

-
Hi,
immer []. Kann mich nicht erinnern mal at() benutzt zu haben.
Da der umgebende Code von [] schon sicherstellt, dass ich nie übers Ziel hinauschieße kann, mache ich mir umsofern keine Sorgen ...
-
Natürlich [], da meine STL Lib in der Debug Version sowieso Grenzprüfungen durchführt und mein Code außen herum [] nur mit gültigen Werten aufruft (es sei denn ich hab nen Bug drin, aber dann meldet mir das die Debug Runtime).
-
[]
-
[] ist nicht indexgeprüft, at() ist die sichere Variante. Welches man einsetzt, ist eigentlich egal. Wenn man [] benutzt, macht man meistens selber ein if davor. Wenn man at() macht, braucht man kein if, sondern kann ein try-catch machen.
-
Grundsätzlich [].
Manchmal auch .at(), z.B. wenn ich unvalidierten Input reinbekomme, und es reicht dass einfach irgendeine Exception fliegt wenn der nicht passt.
-
ich glaube dass die meisten (wie ich) [] verwenden und einfach eine abfrage davor setzen...
-
Ich nehme eigentlich immer [], da ich Input direkt nach der Eingabe validiere.
-
Alles Quatsch, ich benutze nur Iteratoren.
(und im RanIter gibt's eh kein 'at').
-
Meine persönliche Vermutung ist ja, dass die meisten [] benutzen und *keine* Abfrage davor setzen.

-
Jester schrieb:
Meine persönliche Vermutung ist ja, dass die meisten [] benutzen und *keine* Abfrage davor setzen.

Wozu auch? Ist doch eh fast immer in einer Schleife oder mit einem anderweitig bekannten Wert. Wann hat man denn bitte mal solch einen Code?
vector<string> barfoos; cout << "Bitte einen Index eingeben: "; int index; cin >> index; // … cout << "Auswahl war: " << barfoos[index] << endl;– Mir fällt spontan keine vergleichbare Situation auf, die in der Praxis auftritt.
/EDIT: Anderes gilt natürlich beim Auslesen aus einer Datei bzw. offenen APIs. Aber da gehört sowieso (egal, was danach geschieht) eine Überprüfung *aller* eingehenden Werte hin.