
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)
No.1ベストアンサー
- 回答日時:
std::map を定数にして使い続けるって, 考えてみたら経験ないなぁ. たいていなんかのクラスのメンバーにしちゃってるし.
さておき, 本当に「std::map を定数にする」なら (1) か (3) じゃないかな. 多分実質的に同じことになるだろうけど.
(4) はそもそも意味がない (キーは最初から const がつくので) し, (2) は「削除して追加」という迂回路で結果的に中身を変えることができるはず.
ありがとうございます。
(2) の問題点は理解しました。
となると、1, 3, 4-1, 4-3 ですが、これらは本質的には全く同じものを指しているのに、型は(当然)異なります。
全く同じものなのに型は異なるというのは違和感があるのですが、、そういうものとして諦めるしかないでしょうか?
No.2
- 回答日時:
テンプレートクラスについてはテンプレート引数まで含めて「型名」という扱いになるから, 「実質的に同じ」であってもシステム上違うことになるのはしょうがないですねぇ. というか, 「違う型だけど」ってところが「本質的」「実質的」に隠れてるわけでして.
あと念の為明確にしておくと,
std::map<int, int> と std::map<int, const int>
とは動作も違う. 質問文では全体が const になってるから同じ挙動になっちゃうけど.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- C言語・C++・C# Cの関数の引数のconst *charについて 5 2023/04/25 13:05
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++で日本語の処理がしたいです
-
templete における typedef
-
boost::formatの値をstring型に...
-
c++で日本語を処理したい
-
継承されたABのクラスのポイン...
-
Visial C++おけるπの使い方
-
VC++で文字列から任意の文字を...
-
C++で、テキストファイルを一行...
-
組み合わせと順列 アルゴリズム
-
makefileでコンパイルしたい
-
こんにちは.
-
C++型変換について
-
TeXで文書作成しているのですが、
-
c++の問題を教えてください
-
C++の二次方程式のプログラム
-
二次方程式のプログラム
-
メンバ変数が変更されそうなcon...
-
コードの書き方の作法 - includ...
-
C++での <iostream.h>と<iostre...
-
VC++で
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VC++で文字列から任意の文字を...
-
構文エラーが出ているのですが...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
vectorのイテレータを大小比較...
-
JPEGやPNGが読めるLoadImage関数
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
enumの値から定義名を文字列化...
-
CStringとString
-
#define中の#のエスケープ
-
std::map の const 修飾について
-
#include "fstream.h"
-
_tcscat がうまくいきません(V...
-
C言語のポインターで詰まっている
-
構造体配列のvectorへの変換と...
-
C++での <iostream.h>と<iostre...
-
ヘッダーファイルがインクルー...
おすすめ情報