Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Gültigkeit von std::string.c_str()

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.11.2005, 09:13 Uhr
(un)wissender
Niveauwart


Wie lange ist der const char* Pointer gültig? Was garantiert der Standard? Klar ist, dass de Destruktor und die Längenveränderung des string den Pointer ungültig werden lässt.
Wie sieht es mit dem Aufruf anderen Methoden auf, const bzw. nicht const?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.11.2005, 11:11 Uhr
ao

(Operator)


Methoden, die ein const-Attribut tragen, also z.B.

C++:
size_type std::string::find (...) [b]const[/b]

verändern ihr Objekt nicht.

Static-Methoden sind an keine Instanz gebunden; selbst wenn sie mit Instanz-Methoden-Syntax aufgerufen werden:

C++:
std::string mystring;
// ....
mystring.some_static_method ();

können sie das Objekt nicht verändern. Im Fall von std::string gibts AFAIK keine static-Methoden, nur das Member npos, aber das ändert nichts am Prinzip.

Im Übrigen: Laut der Beschreibung auf www.sgi.com/tech/stl/basic_string.html :

Zitat:
Returns a pointer to a null-terminated array of characters representing the string's contents.

"Representing the contents" bedeutet nicht notwendigerweise, dass es *der* Inhalt des std::string sein muss. Wie das C-Array zustandekommt, ist Privatsache der STL-Implementierung. Also Vorsicht.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.11.2005, 11:24 Uhr
(un)wissender
Niveauwart


Hm, theoretisch könnte das interne Array aber auch mutable sein, oder?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.11.2005, 15:59 Uhr
virtual
Sexiest Bit alive
(Operator)


Theoretisch ist denkbar, daß die Rückgabe von c_str z.B. ungültig wird, wenn erneut c_str() oder data() aufgerufen wird. Konkret listet der Standard im Abschnitt 21.3 folgendes auf:

- op>> und getline mit string als Argument
- std::swap oder std::basic_string::swap
- .c_str(), .data()
- Alle non- const member Methoden, mit Ausnahme von op[], at, rend, rbegin, begin, end

Daß das dem std::basic_string zugrunde liegende char Array mutable ist, dürfte fast ausgeschlossen sein, weil das in diesem Fall ein klassischer Misuse von mutable wäre.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: