Negatives Argument für Substr
-
string a = "Hallo Echo!"; string b = a.substr ( 0, -3 ); cout << b << endl;Ausgabe:
Hallo Echo!
Warum ist das so?
Ist das so, weil -3 intern zu unsigned int wird, das Argument dadurch sehr groß wird und beim Kopieren nach b zusätzlich die Grenzen von a geprüft werden?
-
staun0r schrieb:
Ist das so, weil -3 intern zu unsigned int wird, das Argument dadurch sehr groß wird und beim Kopieren nach b zusätzlich die Grenzen von a geprüft werden?
Ich glaube, du meinst das richtig, aber drückst dich falsch aus.
Das zweite Argument (n) vonstd::string::substrerwartet einenstd::size_t.std::size_tist ein vorzeichenloser Typ. Also wird aus -3 irgendeine grosse Zahl, welche das gleiche Bitmuster hat.
In der Funktion werden dann alle Zeichen kopiert vonpos(1. Argument) bispos + n, fallspos + ngrösser ist als die Länge des Strings dann einfach alle restlichen.So funktioniert die Funktion schliesslich auch mit nur einem Argument. Der Standardwert des 2. Arguments (
n) iststd::string::npos, was nichts anderes ist als der Rückgabewert vonstd::numeric_limits<std::size_t>::max().Grüssli