Can "&s[0]" は std::string 内の連続する文字を参照できますか?
次のようなコードであることがわかりました。
std::string s; s.resize( strLength ); memcpy( &s[0], str, strLength );
が std::vector であれば安全ですが、問題は、それが std::string の安全な使用法であるかどうかです。
C 98/03 では、std::string の割り当てが連続していることは保証されません。ただし、C 11 はこの隣接性を強制します。実際には、ほとんどの実装は連続ストレージを使用します。
&s[0] の使用は、長さがゼロの文字列であっても、C 11 標準によって機能することが保証されています。これは、operator[] が次のように定義されているためです:
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
さらに、data() は次のように定義されています:
Returns: A pointer p such that p + i == &s[i] for each i in [0,size()].
したがって、「&s[0]」は連続する文字を指します。 std::string 内にあり、安全な使用法です。
以上が`&s[0]` は C std::string 内の文字への安全で連続したポインタですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。