Heim >Backend-Entwicklung >C++ >Wird std::string in C 11 zusammenhängend gespeichert und mit Null abgeschlossen?

Wird std::string in C 11 zusammenhängend gespeichert und mit Null abgeschlossen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-30 00:42:10993Durchsuche

Is std::string Contiguously Stored and Null-Terminated in C  11?

Wird std::string in C 11 zusammenhängend gespeichert und mit Null abgeschlossen?

In einer früheren Diskussion wurden Bedenken hinsichtlich des Speichers geäußert Layout und Nullterminierung von std::string in C 0x. Herb Sutter schlug aus Gründen der Parallelität vor, eine Nullterminierung zu fordern und Copy-on-Write-Implementierungen zu verbieten.

C 11 garantiert zusammenhängende Speicherung

Wie in der Frage erwähnt, C 11 stellt sicher, dass std::string-Inhalte zusammenhängend gespeichert werden. Allerdings bleibt die Frage unbeantwortet, ob die Vorschläge zur Nullkündigung im endgültigen Entwurf von C 11 übernommen wurden.

Nullkündigung in C 11

Gemäß C 11 Standard [string.accessors] p1, std::basic_string::c_str() heißt es:

„Gibt einen Zeiger p zurück, so dass p i == &operator[](i) für jedes i in [0,size()]“,

gemeint ist der von s zurückgegebene Zeiger. c_str() entspricht der Adresse des Anfangszeichens in der Zeichenfolge (&s[0]). Daher ist std::string in C 11 garantiert nullterminiert.

Auswirkungen auf die Verwendung

Die Nullterminierungsgarantie bedeutet, dass die Verwendung von &str[ sicher ist. 0], um auf das erste Zeichen eines std::string in C 11 zuzugreifen und so die Kompatibilität mit Legacy-Code sicherzustellen, der auf diesem Verhalten basiert.

Das obige ist der detaillierte Inhalt vonWird std::string in C 11 zusammenhängend gespeichert und mit Null abgeschlossen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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