据我所知,C ++将map<a,b>::value_type
定义为pair<const a,b>
如果我在地图中使用指针类型作为键类型会发生什么,即
std::map<const char*,int>::value_type::first_type = const char*
正如我从上面的定义或
所期望的那样std::map<const char*,int>::value_type::first_type = const char* const
因为更合乎逻辑(因为否则我将被允许从地图迭代器中更改键值)?
答案 0 :(得分:11)
您的推理是正确的,value_type::first
将是char const * const
。
当const T
T
type *
const type *
为typedef
时,有一个常见的混淆源,但事实并非如此。与宏不同,const T
不是文本替换,也不是模板参数。执行T
后,如果typedef
是const
或模板参数,则表示您要在整个类型中添加const
。
这就是我喜欢在类型右边写T const *
s的原因之一,因为它会减少混淆:T const * const
,添加额外的const,得到{{1}}
答案 1 :(得分:2)
如果a
为const char*
,那么const a
确实是const char* const
。
答案 2 :(得分:0)
您的评估是正确的,但您必须非常小心这种方法有两个原因: