[解決済み】string_viewとは何ですか?
質問
string_view
は、C++ Library Fundamentals TSの中で提案された機能です(
N3921
) がC++17に追加されました。
私が理解する限り、これはある種の文字列 "概念" を表す型であり、文字列として表示可能な何かを格納できる任意のタイプのコンテナのビューです。
- これで良いのでしょうか?
-
カノニカルの
const std::string&
パラメータタイプはstring_view
? -
について、もう一つ重要な点はありますか?
string_view
を考慮する必要がありますか?
解決方法は?
文字列参照や配列参照を提案する目的は、すでに他の場所にあり、変異しないビューだけが必要なデータをコピーすることを避けるためです。そのため
string_view
という提案もありましたが、今回はその一つです。
string_ref
と
array_ref
も、そうです。
アイデアは常に、最初の要素へのポインタと、いくつかの 既存 のデータ配列または文字列です。
このようなビューハンドルクラスは、値によって安価に渡すことができ、安価なサブストリング操作(単純なポインタの増分とサイズ調整として実装可能)を提供することができる。
文字列の多くの用途では、実際に文字列を所有する必要はなく、問題の文字列はすでに他の誰かに所有されていることがよくあります。そのため、不要なコピーを避けることで効率を上げることができる可能性があります(すべての割り当てと例外を節約できることを考えてみてください)。
オリジナルの C 言語文字列は、ヌルターミネータが文字列 API の一部であったため、基礎となる文字列を変更せずに部分文字列を簡単に作成できないという問題に悩まされていました (たとえば
strtok
). C++では、長さを別々に保存し、ポインタとサイズを1つのクラスにラップすることで簡単に解決できます。
C++標準ライブラリの哲学から乖離し、大きな障害となっているのは、このような "参照ビュー" クラスが、標準ライブラリの他の部分とは全く異なる所有権セマンティクスを持っているということです。基本的に、標準ライブラリの他のすべては、無条件に安全で正しい(コンパイルできれば正しい)ものです。このような参照クラスでは、それはもはや真実ではありません。プログラムの正しさは、これらのクラスを使用するアンビエントコードに依存するのです。だから、それをチェックするのも教えるのも難しくなる。
関連
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] ムーブセマンティクスとは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】C++17の新機能は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む