プロが教えるわが家の防犯対策術!

C++言語において std::map を定数として使う場合、以下のどの使い方が適切ですか?
いずれも変更不可となるため、どれが正しいのか分かりません。
型が違うこと以外に、何か違いが生まれますか?

(1) const std::map<int, int> (インスタンスのconst)
(2) std::map<int, const int> (値のconst)
(3) const std::map<int, const int> (インスタンスと値のconst)
(4) キーもconstにした上で(1)~(3)

A 回答 (2件)

std::map を定数にして使い続けるって, 考えてみたら経験ないなぁ. たいていなんかのクラスのメンバーにしちゃってるし.



さておき, 本当に「std::map を定数にする」なら (1) か (3) じゃないかな. 多分実質的に同じことになるだろうけど.

(4) はそもそも意味がない (キーは最初から const がつくので) し, (2) は「削除して追加」という迂回路で結果的に中身を変えることができるはず.
    • good
    • 0
この回答へのお礼

ありがとうございます。
(2) の問題点は理解しました。
となると、1, 3, 4-1, 4-3 ですが、これらは本質的には全く同じものを指しているのに、型は(当然)異なります。
全く同じものなのに型は異なるというのは違和感があるのですが、、そういうものとして諦めるしかないでしょうか?

お礼日時:2020/05/02 03:38

テンプレートクラスについてはテンプレート引数まで含めて「型名」という扱いになるから, 「実質的に同じ」であってもシステム上違うことになるのはしょうがないですねぇ. というか, 「違う型だけど」ってところが「本質的」「実質的」に隠れてるわけでして.



あと念の為明確にしておくと,
std::map<int, int> と std::map<int, const int>
とは動作も違う. 質問文では全体が const になってるから同じ挙動になっちゃうけど.
    • good
    • 0
この回答へのお礼

よく分かりました。
ありがとうございました!

お礼日時:2020/05/02 11:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています