Heim > Backend-Entwicklung > C++ > Ist „&s[0]' ein sicherer und zusammenhängender Zeiger auf Zeichen in einem C-std::string?

Ist „&s[0]' ein sicherer und zusammenhängender Zeiger auf Zeichen in einem C-std::string?

Patricia Arquette
Freigeben: 2024-12-05 15:41:10
Original
958 Leute haben es durchsucht

Is `&s[0]` a Safe and Contiguous Pointer to Characters in a 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 );
Nach dem Login kopieren

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
Nach dem Login kopieren

Zusätzlich ist data() wie folgt definiert:

Returns: A pointer p such that p + i == &s[i] for each i in [0,size()].
Nach dem Login kopieren

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!

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