Heim > Backend-Entwicklung > C++ > Garantiert „&s[0]' eine zusammenhängende Speicherzuweisung in einem C „std::string'?

Garantiert „&s[0]' eine zusammenhängende Speicherzuweisung in einem C „std::string'?

Linda Hamilton
Freigeben: 2024-12-14 01:55:13
Original
853 Leute haben es durchsucht

Does `&s[0]` Guarantee Contiguous Memory Allocation in a C   `std::string`?

Zugriff auf Zeichen über „&s[0]“ in einem std::string

In C bietet die Klasse std::string eine bequeme Möglichkeit, Zeichenfolgen zu manipulieren. Die zugrunde liegende Darstellung von Zeichenfolgendaten kann jedoch je nach Implementierung unterschiedlich sein, was zu Fragen zur Speichersicherheit führt.

Frage:

Verwendet „&s[0]“? Zugriffszeichen in einem std::string garantieren zusammenhängenden Speicher Zuordnung?

Antwort:

Unter dem C 98/03-Standard ist die Speicherzuordnung eines std::string nicht explizit definiert und überlässt es der Implementierung . Der C 11-Standard schreibt jedoch zusammenhängende Speicherung für std::string-Objekte vor.

In der Praxis haben die meisten Implementierungen, sowohl vor als auch nach der Standardisierung von C 11, zusammenhängende Speicherung für std::string übernommen. Dies bedeutet, dass die Verwendung von „&s[0]“ für den Zugriff auf Zeichen im Allgemeinen als sicher gilt.

Standardgarantierter Zugriff:

Gemäß dem C 11-Standard ist der Operator[ ] für std::string garantiert immer den Zugriff auf eine gültige Zeichenreferenz. Selbst in Fällen, in denen die Zeichenfolge leer ist, ist „&s[0]“ so definiert, dass es auf ein Objekt mit einem charT()-Wert zeigt, wodurch sichergestellt wird, dass es eine gültige Speicherreferenz bleibt.

Dies wird durch die noch verstärkt Definition von data() für std::string, die angibt, dass der zurückgegebene Zeiger „p“ auf aufeinanderfolgende Speicherorte verweisen soll, die mit den über „&operator[](i)“ zugänglichen Elementen innerhalb des gültigen Bereichs übereinstimmen [0,size()].

Historische Anmerkung:

In früheren Versionen des C 0x-Standards war das Verhalten von „&s[0]“ mit Null- Die Länge der Zeichenfolgen war nicht definiert. Allerdings haben die Vorstandardisierung C 0x und nachfolgende Standardentwürfe dieses Verhalten klargestellt und garantiert, dass „&s[0]“ in allen Fällen auf eine gültige Speicherreferenz verweist.

Das obige ist der detaillierte Inhalt vonGarantiert „&s[0]' eine zusammenhängende Speicherzuweisung in einem C „std::string'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage