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?
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!