2016-07-10 9 views
2

Der folgende Code funktioniert wie zB erwartet, druckt es die Zeichenfolge in umgekehrterC++ String size_t

std::string s("abcd"); 

for (int i=s.length()-1; i>=0; --i) { 
    std::cout << s[i]; 
} 

geht jedoch der folgende Code in Endlosschleife Druck Junk-Zeichen und schließlich crashes-

std::string s("abcd"); 

for (std::size_t i=s.length()-1; i>=0; --i) { 
    std::cout << s[i]; 
} 

Warum mit size_t als Typ von i stürzt das Programm ab?

Am mit g ++ ausgeliefert mit MinGW auf Windows

C:/MinGW/bin/g++ --version 
g++ (GCC) 6.1.0 
+4

GCC kann immer wahr [warnen] (http://coliru.stacked-crooked.com/a/ce861d53b647251b) Sie dazu: * Warnung : Vergleich von unsigned Ausdruck> = 0 ist immer wahr [-W Type-Grenzen] * – chris

Antwort

8

Dies liegt daran, std::size_t keine negativen Zahlen speichern kann und daher ist die Bedingung

+0

Oh ja ...! :) Danke für das Erinnern – nightlytrails

4

Ein Typ ohne Vorzeichen wird niemals einen negativen Wert haben. Daher wird die Bedingung i>=0 immer true auswerten.

+0

vielleicht meintest du unsigned –

+0

@EdHeal, natürlich :) –