問題タブ [string-view]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - string_view とは何ですか?
string_view
C++ Library Fundamentals TS ( N3921 ) 内で提案された機能であり、C++17 に追加されました。
私が理解している限りでは、文字列として表示可能なものを格納できる任意のタイプのコンテナのビューである、ある種の文字列「概念」を表すタイプです。
- これは正しいですか ?
- 正規の
const std::string&
パラメータ タイプは になりstring_view
ますか? string_view
他に考慮すべき重要な点はありますか?
c++ - コピーせずに文字列に外部バッファを使用する
const string&
たとえば、入力として取得する関数があるとします。
そしてconst char* buffer;
、サイズがわかっている内部バッファーがあります。
文字列をインラインで作成すると、まだ 1 つのコピーが発生すると思います。
しかし、すべてが一定であるため、バッファをコピーする必要はありません。文字列クラスが作成するバッファではなく、文字列クラスの機能が必要なだけです。
コピーが発生するかどうかはわかりませんが、文字列のコンストラクターを見ると、すべてがコピーが発生すると言いました。コンパイラの最適化がそのような状況を理解できるかどうかはわかりませんし、コピーが行われたかどうかを確認する方法を見つけることができませんでした。
文字列に外部バッファを使用する方法はありますか、または少なくともコピーが行われるかどうかを確認する方法はありますか。現在、std 文字列と c++11 を使用しています。
c++ - gsl::array_view> std::vector から
クラスにメンバー変数std::vector<std::string>
があり、 と の組み合わせを使用して、メンバー関数から不変ビューとしてそれを返したいとしgsl::array_view
ますgsl::cstring_view
。残念ながら、以下はコンパイルされません。
cstring_view
これは、array_view
を作成できるコンテナーがないためです。だから私の質問は: type のメンバーのようなものを明示的に追加せずにそのような構造を使用する方法はありstd::vector<gsl::cstring_view<>>
ますか?これは明らかに望ましくありませんか?
編集
そのような「変換」ビューは、より一般的に使用できるように思えます。実装定義のストレージ アプローチを公開せずに、生のポインターとしてクラスのユーザーに公開したいvector
などの所有ポインターを持つことを検討してください。考え?std::vector<std::shared_ptr<T>>
array_view
gsl::array_view<const T*>
boost - boost::string_ref と boost::string_view の違い
Boost はstring_view
、C++17 の一部となるの 2 つの異なる実装を提供します。
boost::string_ref
のutility/string_ref.hpp
boost::string_view
のcore/string_view.hpp
これらの間に大きな違いはありますか?今後はどちらを優先すべきですか?
注: Boost 1.61 で気づいたのですが、boost::log は string_view を優先して string_ref を非推奨にしました。指標なのではないでしょうか?( http://www.boost.org/users/history/version_1_61_0.html )
c++ - std::string_view コンパイル時のハッシュ
C++17 string_viewのstd::hash 関数は constexpr のものではないようです。
const char[] にバインドされた文字列ビューは、コンパイル時にハッシュされる可能性があるように思えます (これは非常に便利です)、またはこれを妨げるものはありますか?