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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
enumの値から定義名を文字列化したい
C言語・C++・C#
-
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
-
4
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
5
C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい
C言語・C++・C#
-
6
C++のfor文について
C言語・C++・C#
-
7
C++でboolにintの値を代入することについて
C言語・C++・C#
-
8
既定のコンストラクタがない?
C言語・C++・C#
-
9
acceptをalarmでタイムアウトさせる処理がうまくいきません
C言語・C++・C#
-
10
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
11
MFCでコンボボックスを選択不可状態にしたい
C言語・C++・C#
-
12
std::stringからLPCWSTR型への変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
なぜ、C++の標準ヘッダをインク...
-
enumの値から定義名を文字列化...
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
【C++】複素数で配列を使いたい
-
#include "fstream.h"
-
ヘッダーファイルがインクルー...
-
#define中の#のエスケープ
-
C++で、テキストファイルを一行...
-
snprintfが使用できない。
-
C言語 ストリームについて。
-
#defineの使い方について
-
VC++ iostreamの不具合(?)
-
wstringの内容を表示させたい
-
構造体に決められた文字列を入...
-
このプログラミング誰か教えて...
-
switch文のエラーについて
-
C++での <iostream.h>と<iostre...
-
wstringの主力
-
指定した文字を削除したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
enumの値から定義名を文字列化...
-
VC++で文字列から任意の文字を...
-
C言語 ストリームについて。
-
switch文のエラーについて
-
string型のフォーマット書式指...
-
構文エラーが出ているのですが...
-
空ENTERの判別
-
gccでコンパイル時のエラー
-
なぜ、C++の標準ヘッダをインク...
-
リモートデスクトップの接続元I...
-
JPEGやPNGが読めるLoadImage関数
-
mapの初期化
-
snprintfが使用できない。
-
atlbase.h と afxwin.hの同時定義
-
C言語のエラーを修正したい
-
CSting を TCHAR [] に変換した...
-
#include "fstream.h"
-
構造体配列のvectorへの変換と...
-
【C++】ヘッダ内でstringを格納...
-
CStringとString
おすすめ情報