std::vector<T>::operator[] const
がを返してくれることを盲目的に受け入れたが、スマートポインタのconstがどのように機能するかに照らして、今やSTLコンテナの他の部分が方法。 const std::vector
の "constness"はベクトルとその要素の両方に適用されているようですが、スマートポインタの場合は "constness"はポインターにのみ適用され、ポインターには適用されません。コンテナのconstの正確さ
明確にするために、const
は、ユーザーがコンテナのサイズを変更できないことを意味するベクトルのようなコンテナがあるように思われますが、コンテナ内の要素は変更可能です。私の主な質問は:このタイプのコンテナが "const正しい"ことを防ぐ何かがありますか?
これを達成するために間接的な追加のレイヤー(例:std::vector<std::unique_ptr<T>> const
)を追加することで、いくつかのハックのある回避策があるようですが、私はメンテナンスの面で少し面倒です。
スマートポインタがSTLコンテナの前の言語に組み込まれていた場合、constアクセサーはまだ今日のように定義されていますか?
'mutable std :: vector'でindireclyで動作するように合成を使用する独自のクラスを定義し、publicメンバ関数を通してconstの正確さを保証することができます。 – oLen
'std :: vector :: operator []'は参照を返します。 'std :: vector :: operator [] const'はconst参照を返します。 –
@マーシャル・クロウ何とか私の元のドラフトから落ちた。私はそれを再び追加します。ありがとう。 – pelletjl