Hallo,
die beiden Dinge sind nicht exakt das gleiche, deshalb unterscheiden sie sich auch etwas in ihrem Verhalten.
strlen ist eine Funktion, die die Länge von nullterminierten C Strings zurückgibt. Die muss also bei jedem Aufruf durch den Speicher laufen und bis zur nächsten Null laufen.
C++ Strings sind nicht nullterminiert, sie können auch Nullzeichen enthalten und funktionieren dann immer noch. Der Aufruf von length durchläuft nicht den string, sondern liefert eine Membervariable der Klasse zurück, die die Anzahl der (wirklich) gespeicherten Zeichen zurückgibt. (Der interne Puffer des String Objekts kann mehr Speicherplatz vorhalten, damit beim Hinzufügen von Zeichen nicht jedesmal der String neu angelegt werden muss.)
Im übrigen "hat C++ da noch was eingebaut", es gibt seit C++11 auch noch eine zweite Art von for-Schleife:
http://en.cppreference.com/w/cpp/language/range-for
Lesezeichen