std::string::data() macht das selbe wie std::string::c_str()
-
const _Elem *c_str() const { // return pointer to null-terminated nonmutable array return (_Myptr()); } const _Elem *data() const { // return pointer to nonmutable array return (c_str()); }

-
Ist ja nicht verboten. Aber auch nicht vorgeschrieben.
-
schau dir mal die methoden size() und length() an, da gibts das gleiche nochmal

-
Aber achtung! Bei der Methode data() ist nicht garantiert dass das Array Null-terminiert ist. Es darf es aber sein.
-
der grund is, dass für die implementierung ein bestimmtes interface mit einem bestimmten verhalten vorgegeben is
es is nich von interesse wie es im hintergrund implementiert ist, solange das verhalten der aufrufe den vorgaben entspricht
-
Ehrlich gesagt, glaube ich nicht, dass du eine Implementirung finden wirst bei der es aber nicht der Fall ist.
-
das konzept wird vieleicht klarer wenn du an die libc denkst, die für die unterschiedlichsten hardwareplatformen verfügbar is
da können die implementierungen sehr unterschiedlich sein
in dem fall is es mehr ein theoretischer unterschied der beim design festgelegt wurde
die eine funktion gibt einen string zurück... die andere daten
-
naja, aber data() soll ja tatsächlich den char-Array ohne null-Terminierung zurück geben. Ich weiß jetzt nicht ob es Pflicht ist, aber das soll doch eigentlich der Sinn sein. Klar ist die Implementierung nicht vorgegeben, aber das Verhalten ist hier doch nicht so wie man es eigentlich erwartet, oder?
-
er gibt auch n char array ohne null terminierung zurück
die null terminierung steht zwar hinter dem char array aber gehört per definition nicht dazu :p
-
Artchi schrieb:
... aber das Verhalten ist hier doch nicht so wie man es eigentlich erwartet, oder?
Wieso sollte man standardmäßig im Bereich [ size(), capacity() ) Daten erwarten?