ホームページ >バックエンド開発 >C++ >`std::string` のコピーオンライト実装は C 11 で合法ですか?

`std::string` のコピーオンライト実装は C 11 で合法ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-15 03:28:08819ブラウズ

Is a Copy-on-Write Implementation of `std::string` Legal in C  11?

C での std::string の COW 実装 11: 合法性と制限

コピーオンライト (COW) はよく使われる手法です実際に変更されるまで新しいオブジェクトの作成コストを延期することでパフォーマンスを向上させるために使用されます。ただし、COW が C 11 で std::string を実装するための有効なアプローチであるかどうかは疑問視されています。

COW 実装の制限

C 11 標準による(21.4.1 p6)、反復子と参照の無効化は特定の場合にのみ許可されます。状況:

  • 非 const の Basic_string への参照を受け取る標準​​ライブラリ関数に引数として渡されたとき。
  • operator[] を除く非 const メンバー関数を呼び出すとき、 at、front、back、begin、rbegin、end、および rend。

COW 文字列実装の場合、以下を呼び出します。非 const 演算子 [] の場合は、コピーを作成して参照を無効にする必要があります。これは前項により禁止されております。その結果、COW に基づいて std::string を実装することは、C 11 では合法とみなされなくなりました。

明示的な制限事項

標準では明示的に規定されていません。 COW ベースの std::string 実装は禁止されています。ただし、この制限は、無効化シナリオを明示的に制限する要件の組み合わせによって暗黙的に示されます。

結論

以前のバージョンでは COW は std::string の実行可能な実装でしたが、 C の仕様では、参照の無効化が禁止されているため、C 11 仕様では COW ベースの実装を禁止する制約が導入されています。

以上が`std::string` のコピーオンライト実装は C 11 で合法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。