Heim >Backend-Entwicklung >C++ >Ist „&s[0]' ein sicherer und zusammenhängender Zeiger auf Zeichen in einem C-std::string?
Kann „&s[0]“ auf aufeinanderfolgende Zeichen in einem std::string verweisen?
Es wurde festgestellt, dass Code wie folgt aussieht:
std::string s; s.resize( strLength ); memcpy( &s[0], str, strLength );
wäre sicher, wenn s ein std::vector wäre, aber die Frage ist, ob es eine sichere Verwendung von ist std::string.
In C 98/03 ist die Zuordnung eines std::string nicht garantiert zusammenhängend. C 11 erzwingt jedoch diese Kontiguität. In der Praxis verwenden die meisten Implementierungen zusammenhängenden Speicher.
Die Verwendung von &s[0] garantiert durch den C 11-Standard, dass sie auch für Zeichenfolgen der Länge Null funktioniert. Dies liegt daran, dass der Operator[] wie folgt definiert ist:
Returns *(begin() + pos) if pos < size(), otherwise a reference to an object of type T with value charT(); the referenced value shall not be modified
Zusätzlich ist data() wie folgt definiert:
Returns: A pointer p such that p + i == &s[i] for each i in [0,size()].
Daher zeigt „&s[0]“ auf aufeinanderfolgende Zeichen in einem std::string und ist eine sichere Verwendung.
Das obige ist der detaillierte Inhalt vonIst „&s[0]' ein sicherer und zusammenhängender Zeiger auf Zeichen in einem C-std::string?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!