[解決済み] C++11ではvector<const T>が使えるようになりましたか?
質問
C++03 と C++11 ではコンテナの要件が変わりました。 C++03 では包括的な要件(ベクターのコピー構成可能性や割り当て可能性など)がありましたが、C++11 ではコンテナ操作ごとに細かな要件が定義されています(第 23.2 項)。
その結果、割り当てを必要としない特定の操作のみを実行する限り、たとえば const メンバを持つ構造体など、コピー構築可能だが割り当て不可能な型をベクトルに格納できます(構築および
push_back
はそのような操作です。
insert
は違う)。
私が疑問に思っているのは、この規格では現在
vector<const T>
? 私は、それが許されない理由は何もないと思います。
const T
は、const メンバを持つ構造体と同じように、コピー構築は可能ですが代入はできない型です - しかし、私は何かを見逃しているかもしれません。
(私が何かを見落としたかもしれないと思う理由のひとつは、gcc trunk で
vector<const T>
をインスタンス化しようとすると、gcc trunkはクラッシュして燃えるのですが
vector<T>
では問題ありません。)
どのように解決するのですか?
いいえ、アロケータの要件では、T は "非構成、非参照オブジェクト型" にすることができるとされていると思います。
定数オブジェクトのベクトルでは、あまり多くのことはできないでしょう。また
const vector<T>
はどうせほとんど同じだろう。
何年も経った今でも、この即答はコメントと票を集めているようです。常に上昇するわけではありません :-)
そこで、いくつかの適切なリファレンスを追加するために
私が紙で持っているC++03標準の場合、[lib.allocator.requirements]セクションの表31にはこう書かれています。
T, U any type
ではない どんな のタイプは実際に機能しました。
そこで、次の規格である C++11 では を近いドラフトで を[allocator.requirements]に、そして現在は表27に記載しています。
T, U, C any non-const, non-reference object type
というのは、もともと私が記憶で上に書いたものに極めて近いです。質問の内容もこれです。
しかし、C++14では( 草案 N4296 ) 表 27 にはこう書かれています。
T, U, C any non-const object type
おそらく、参照は結局のところオブジェクト型ではないからでしょうか?
そして今、C++17では( 草案 N4659 ) では、表 30 に書かれています。
T, U, C any cv-unqualified object type (6.9)
ということは、それだけでなく
const
が除外されただけでなく
volatile
. おそらく、いずれにせよ古いニュースであり、単なる明確化である。
以下もご参照ください。 ハワード・ヒナント氏による直接の情報 をご覧ください。
関連
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] Static readonly」対「const」。
-
[解決済み] constexpr` と `const` の相違点
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複