文字列における c_str() と data() の謎を解く
ドキュメントでは、c_str() と data の決定的な違いについて長い間言及されてきました。文字列実装の () メソッド: c_str() は null で終了する文字列を保証しますが、data() は保証しません。ただし、実際には、この区別は曖昧なことが多いようです。
技術
多くの実装では、data() は単純に c_str() を呼び出し、返される文字列が確実にnull で終了する。この実装の詳細により、data() を c_str() と同じ意味で使用したくなります。ただし、c_str() の中心的な目的、つまり null で終了する文字列を提供することを覚えておくことが重要です。
適切なツールの選択
null で終了する文字列が使用されるシナリオでは、 string が必要な場合 (ネイティブ C 関数に渡す場合や、通常の null で終わる文字配列と比較する場合など)、c_str() が当然の選択です。対照的に、null で終了する文字列が必要ない場合 (たとえば、null で終了しない文字列を処理できる非 C コードを使用する場合)、data() は c_str() よりもパフォーマンス上の利点を提供できます。
文字データを超えて
C の文字列には文字以外のデータが含まれる可能性があることにも注意してください。このような場合、data() はデータの本質を反映するため、意味的により適切になります。一方、c_str() は、そのようなコンテキストでは意味がありません。
C 11 以降
C 11 以降、data() の動作はそして c_str() は標準化されました。どちらの関数も null で終了する文字列を返す必要があるため、基本的に関数間の技術的な違いはなくなりました。したがって、data() と c_str() のどちらを選択するかは、技術的な制約よりもセマンティクスとパフォーマンスの問題になります。
以上が文字列で data() と c_str() を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。