2016-08-29 11 views
16

私の質問は、C++ 17に関するされています。何http://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_viewSTDからの暗黙の型変換::はstd ::文字列C++ 17でstring_view(STDにあった::実験:: basic_string_view)

をstd :: basic_stringからstd :: basic_string_viewへの暗黙的な変換に注意してください。後者のインターフェースには含まれていませんでしたか?

私はこのクラスを大きく改善すると信じています。特に、比較演算子のファミリは、std :: stringもどちらも受け入れません。lhsでもrhsです。

ライブラリのファンダメンタルズのTS仕様では、このような変換があります:http://en.cppreference.com/w/cpp/experimental/basic_string_view/basic_string_view

この質問は、それが削除された理由についてですが。またはむしろ採用されていません。

+0

C++ 17の変換は、string_vewからstringに逆方向に行われます。 – Cubbi

+0

@Cubbi 1つの場合、その変換は*明示的*です。 2番目の場合、 'std :: string'への変換は' std :: string_view'を 'std :: string'と比較するかなり高価な方法です。 – GreenScape

+8

これは 'basic_string'の責任であると判断されました。 http://en.cppreference.com/w/cpp/string/basic_string/operator_basic_string_view –

答えて

15

​​は、下位レベルのクラスとみなされます。 string_viewへの暗黙的な変換を行う責任を負う文字列コンテナのプロバイダです。独自の文字列型を使用している場合は、暗黙の変換を実行するために、おそらくexplicitoperator string_view()のオーバーロードを与えます。

したがって、it was decided (PDF)は、basic_stringとなり、​​に変換されます。オリジナルのLibrary Fundamentalsバージョンでは、暗黙の変換は​​になりました。なぜならTSは通常は拡張であるからです。そのタイプを効果的にフォークすることなく、既存のタイプに影響を与えることはできません。

関連する問題