C 11 の c_str() と Null で終わる文字列
C 11 では、basic_string::c_str() の定義により質問: まだ null で終わる文字列が生成されますか?
問題
C 11 では、basic_string::c_str は、basic_string::data と一致するように定義されています。これは、(begin() n) および (&*begin() n) と整列します。文字列の末尾に null 文字を使用する明示的な要件はありません。
答え
明示的な定義がないにもかかわらず、C 11 の文字列は次のことを行う必要があります。内部的にヌル終了バッファを使用します。これは、operator[]:
"Returns: pos
c_str はoperator[] に関して定義されており、c_str と data の両方が O(1) でなければならないため、実装では null で終了するバッファーを使用する必要があります。
追加の考慮事項
operator[] の戻り値要件は、&operator[](0) を使用して c_str() を取得できることを意味します。これは、終端の null 文字が同じバッファ内に存在する必要があることを意味します。したがって、ターミネータを遅延初期化しても、中間状態では観測できません。
結論
当初の想定に反して、C 11 の c_str() は次のようになります。 null で終了する文字列の生成が引き続き保証されているため、従来のコードとの互換性が確保され、効率的な文字アクセスが可能になります。
以上がC 11 の `c_str()` は依然として null で終了する文字列を返すことが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。