据我所知,C++定义map<a,b>::value_type为pair<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,当T是type *是const type *的,但事实并非如此.与宏不同,typedefs不是文本替换,也不是模板参数.当你这样做时const T,如果T是一个typedef或模板参数,你将整体添加一个const类型.
这就是为什么我喜欢const在类型的右边写我的s的原因之一,因为它会减少混淆:T const *添加一个额外的const,得到T const * const.