value_type用于将指针作为键的映射

pqn*_*net 11 c++ stl map

据我所知,C++定义map<a,b>::value_typepair<const a,b>

如果我在地图中使用指针类型作为键类型会发生什么,即

std::map<const char*,int>::value_type::first_type = const char*
Run Code Online (Sandbox Code Playgroud)

正如我对上面的定义所期望的那样

std::map<const char*,int>::value_type::first_type = const char* const
Run Code Online (Sandbox Code Playgroud)

因为更合乎逻辑(因为否则我将被允许从地图迭代器中更改键值)?

Dav*_*eas 11

你的推理是正确的,value_type::first是的char const * const.

有混乱的思维,一个共同的来源const T,当Ttype *const type *的,但事实并非如此.与宏不同,typedefs不是文本替换,也不是模板参数.当你这样做时const T,如果T是一个typedef或模板参数,你将整体添加一个const类型.

这就是为什么我喜欢const在类型的右边写我的s的原因之一,因为它会减少混淆:T const *添加一个额外的const,得到T const * const.