具有指针作为键的映射的值类型 对于我所知道的,C++定义了 MAP:ValueSyType < /C> >作为代码>配对< /Calp> < /P>
如果在映射中使用指针类型作为键类型,即具有指针作为键的映射的值类型 对于我所知道的,C++定义了 MAP:ValueSyType < /C> >作为代码>配对< /Calp> < /P>,c++,stl,map,C++,Stl,Map,如果在映射中使用指针类型作为键类型,即 std::map<const char*,int>::value_type::first_type = const char* std::map::value\u type::first\u type=const char* 正如我从上面的定义中所期望的,或者 std::map<const char*,int>::value_type::first_type = const char* const std::map::valu
std::map<const char*,int>::value_type::first_type = const char*
std::map::value\u type::first\u type=const char*
正如我从上面的定义中所期望的,或者
std::map<const char*,int>::value_type::first_type = const char* const
std::map::value\u type::first\u type=const char*const
更符合逻辑的是(否则我将被允许从映射迭代器更改键值)如果
a
是const char*
,那么const a
确实是const char*const您的评估是正确的,但出于两个原因,您必须非常小心使用这种方法:
您必须提供一个自定义比较器谓词,该谓词对const char*进行正确排序(例如,使用一个strcmp变量,该变量仅在key1
<> LI>你必须考虑地图中键的寿命以及当地图被销毁时它们如何被释放。
您的推理是正确的,value\u type::first
将是char const*const
当T
是类型*
时,认为const T
是const类型*
是一种常见的困惑,但事实并非如此。与宏不同,typedef
s不是文本替换,也不是模板参数。执行const T
时,如果T
是typedef
或模板参数,则将const
作为一个整体添加到类型中
这就是我喜欢在类型的右边写我的const
s的原因之一,因为它会减少混淆:T const*
,添加一个额外的const,获取T const*const
考虑改用std::string。是的,通常这是一个常见错误,然而,在某些情况下,您确实只想比较指针而不是字符串(例如:如果您有编译时常量字符串作为键,如枚举的可打印版本,或者如果您正在从HWND映射到winapi事件管理中的相对窗口处理对象),这会减轻您的负担。我想我们应该推广使用type const
而不是const type
的惯例,特别是在新程序员中,这将避免在type
是指针的情况下产生混淆。