6

重複の可能性:
stack<const string> が g++ でコンパイルされないのはなぜですか?

別の質問への回答constは、(おそらく)オブジェクト のコンテナーを持てない理由を説明しました。たとえば、これは許可されていません。

vector<const int> v; //not allowed

しかし、なぜpair最初のオブジェクトが であることを許可するのconstでしょうか? これは実際、オブジェクトpair内の s で起こることです。map何か不足していますか?

この現象の詳細で直感的な説明をいただければ幸いです。

4

2 に答える 2

17

主な理由は、std::pairオブジェクトを再割り当てしないため、割り当て可能である必要がないためだと思います。

アップデート:

実際、割り当て可能なオブジェクトを必要とするコンテナは vector だけです。これは、標準ベクトルに応じて、その要素の連続した格納場所が必要なためです。そのため、オブジェクトを追加する余地がない場合、ベクトルはそのデータを別の場所に再割り当てする必要があります (したがって、オブジェクトの割り当て可能なプロパティを使用します)。

于 2012-12-07T17:32:01.100 に答える
6

std::pairあなたがそれに割り当てようとする場合にのみ、その内容が割り当て可能である必要があります。ただし、std::vector再割り当ての目的で常に割り当てが必要です。

于 2012-12-07T17:34:09.873 に答える