24

私はいくつかのGCCバグレポートを読み、そこで人々は「vstring」について話していました。WEBを検索すると、 http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/vstring_8h.htmlに気づきました。

誰かがそれが何のために有用で使用されているかについて詳しく説明してもらえますか?std :: stringの代わりに使用するのはなぜですか?

4

1 に答える 1

23

GCCは、GCC4.1の実装vstringで導入された用途の広い文字列クラスです。libstdc++

と互換性がありstd::basic_string、次の追加の詳細があります。

  • 2つの基本クラスが提供されます。
    • デフォルトのものは参照カウントを回避し、短い文字列用に最適化されています。
    • 代替のものは、いくつかの低レベルの領域(たとえば、位置合わせ)を改善しながら、それを使用します(つまり、参照カウント)。vstring_fwd.hいくつかの便利なtypedefについてはを参照してください。
  • さまざまなアルゴリズムが書き直され(たとえば、置換)、コードが合理化され、単純な最適化が追加されました。
  • DR 431のオプション3は、使用可能な両方のベースに実装されているため、ステートフルアロケータのサポートが向上します。

DR431は、ライブラリワーキンググループの欠陥レポート431であり、オプション3は、クラスのアロケータサポートを改善して、スワッピングやその他のアロケータ関連の操作を改善するように見えます。

基本的な詳細は、GCC4.1のリリースノートの「ランタイムライブラリ」セクションにあります。

編集:

std::stringこの拡張機能の本来の目的は、C++11実装の基礎を提供することであったように見えます。GCC / libstdc++の寄稿者であるPaoloCarliniは、このGCCバグレポート<ext/vstring.h>で、次の非参照カウントの実験バージョンを含むコメントをしていますstd::string。2012年4月12日付けのコメント:

私たちが説明しようとしたのは、この種の問題はよく知られており、多かれ少なかれ、参照カウントの実装に影響を与えるということです... 参照カウントが使用されていない場合はそうではなく、実際には使用されません(新しいC ++ 11 Standard)の新しい実装で、std::string<ext/vstring.h>現在...として紹介しています。

于 2012-05-05T16:48:22.827 に答える