[解決済み] COW std::stringのC++11での実装の適法性
2022-08-08 10:42:20
質問
私の理解では、copy-on-write は準拠した
std::string
を実装する現実的な方法ではないと理解していましたが、最近議論になったとき、その発言を直接支持することができないことがわかりました。
C++11 は COW ベースの実装を認めないというのは正しいでしょうか。
std::string
?
もしそうなら、この制限は新しい規格のどこか(どこ)に明示されていますか?
それとも、この制限は、新しい要件の複合的な効果という意味で、暗黙の了解となっているのでしょうか。
std::string
のCOWベースの実装を妨げるという意味です。
std::string
. この場合、「C++11 は COW ベースの実装を効果的に禁止している」という章と節のスタイルでの派生に興味があります。
std::string
の実装を効果的に禁止しています。
どのように解決するのですか?
それは許されません。なぜなら、標準21.4.1 p6によると、イテレータ/参照の無効化は、以下の場合にのみ許可されるからです。
- への参照を取る標準ライブラリ関数への引数としてのみ許可されます。 への参照を引数として取る標準ライブラリ関数の引数としてのみ許可されます。
- 非恒等式 メンバ関数を呼び出すこと。ただし、operator[]、at、front、back、begin、rbegin, end、およびrendを除く。
COW文字列の場合、非構成文字である
operator[]
を呼び出すと、コピーを作成する(そして参照を無効にする)必要がありますが、これは上の段落で禁止されています。 したがって、C++11 で COW 文字列を持つことはもはや合法ではありません。
関連
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】Enterキーを押して続行する
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] 配列のベクトルを扱う正しい方法