として実装されたシンボルテーブルがありますstd::map
。値の場合、既定のコンストラクターを介して値型のインスタンスを正当に構築する方法はありません。ただし、デフォルトのコンストラクターを提供しないとコンパイラ エラーが発生し、コンストラクターをアサートすると、プログラムは正常にコンパイルされますが、map<K,V>::operator []
それを使用して新しいメンバーを追加しようとすると内部でクラッシュします。
C++ をmap[k]
コンパイル時に (r 値として許可しながら) l 値として許可しないようにする方法はありますか?
ところで: を使用してマップに挿入できることはわかっていますMap.insert(map<K,V>::value_type(k,v))
。
編集:値の型を変更して、デフォルトのコンストラクターを呼び出さずにマップを構築できるようにする解決策を何人かの人々が提案しています。これは、後でエラーを非表示にするため、私が望むものとは正反対の結果になります。そうしたければ、単純にコンストラクターからアサートを削除できます。私が望むのは、エラーをさらに早く発生させることです。コンパイル時に。ただし、r値とl値の使用を区別する方法がないようですoperator[]
ので、私が望むことはできないようですので、一緒に使用することはやめてください。