208

string_viewC++ Library Fundamentals TS ( N3921 ) 内で提案された機能であり、C++17 に追加されました。

私が理解している限りでは、文字列として表示可能なものを格納できる任意のタイプのコンテナのビューである、ある種の文字列「概念」を表すタイプです。

  • これは正しいですか ?
  • 正規の const std::string&パラメータ タイプは になりstring_viewますか?
  • string_view他に考慮すべき重要な点はありますか?
4

2 に答える 2

3

(2021年に自分自身を教育する)

Microsoft の<string_view>から:

テンプレートの特殊化の string_view ファミリは、シーケンスの最初の要素がゼロの位置にある文字列のようなオブジェクトの文字データに、読み取り専用、例外セーフ、非所有ハンドルを渡す効率的な方法を提供します。(...)

Microsoft の C++ チーム ブログstd::string_view: The Duct Tape of String Types from August 21st, 2018 (2021 年 4 月 1 日取得) から:

string_view は、「すべてのプラットフォームとライブラリに独自の文字列型がある」というパラメーターの問題を解決します。任意の文字列にバインドできるため、関数を文字列ビューを受け入れるように記述するだけです。

void f(wstring_view); // string_view that uses wchar_t's

呼び出し元のコードが使用している文字列のような型を気にせずに呼び出します (そして、(char*, length) 引数のペアに対しては、それらの周りに {} を追加するだけです) (...)

(...)

今日、文字列データを渡すために使用される最も一般的な「最小公分母」は、ヌル終了文字列 (または、標準で呼ばれているように、ヌル終了文字型シーケンス) です。これは C++ よりずっと前からあり、クリーンな「フラット C」の相互運用性を提供します。ただし、長さ情報はデータの帯域内プロパティであり、改ざんされやすいため、char* とそのサポート ライブラリは悪用可能なコードに関連付けられています。さらに、長さを区切るために使用される null は、埋め込まれた null を禁止し、長さを要求する最も一般的な文字列操作の 1 つで、文字列の長さが線形になる原因となります。

(...)

各プログラミング ドメインは、独自の新しい文字列型、有効期間のセマンティクス、およびインターフェイスを構成しますが、多くのテキスト処理コードはそれを気にしません。異なる文字列型を満足させるためだけに処理するデータのコピー全体を割り当てることは、パフォーマンスと信頼性にとって最適ではありません。

于 2021-04-01T06:47:27.267 に答える