C++ 我可以将非常量值类型的映射强制转换为常量值类型的映射吗?
我有如下几点:C++ 我可以将非常量值类型的映射强制转换为常量值类型的映射吗?,c++,stl,C++,Stl,我有如下几点: map<int, StructType> map; const map<int, StructType>& GetMap() { return map; } map; 常量映射&GetMap(){return map;} 我想做以下几点: const map<int, const StructType>& GetConstMap() { return map; } const-map&GetConstMap(){retur
map<int, StructType> map;
const map<int, StructType>& GetMap() { return map; }
map;
常量映射&GetMap(){return map;}
我想做以下几点:
const map<int, const StructType>& GetConstMap() { return map; }
const-map&GetConstMap(){return-map;}
有什么方法可以将这个
const
-ness添加到映射的值类型中吗?std::map的接口设计为const-map
通过从不公开对其元素的非常量访问,有效地具有const-value类型
因此,您不能通过常量映射
引用添加、删除或修改元素
因此:
struct X
{
地图m;
常量映射&GetConstMap()常量{return m;}
}
是您想要的。std::map的接口设计为
const map
通过从不公开对其元素的非常量访问,有效地具有常量值类型
因此,您不能通过常量映射
引用添加、删除或修改元素
因此:
struct X
{
地图m;
常量映射&GetConstMap()常量{return m;}
}
是您想要的。您以任何方式返回一份副本,所以如果它是
const
,这有关系吗?对不起,我忘了将其作为参考。已修复。常量映射
隐式地具有常量
值类型。即使如此,也不必返回带有常量值的映射。所有允许非常量访问映射值的成员函数也是非常量的,因此不能在常量引用上调用。唯一的方法是扔掉常量
。如果返回引用是非常量,但您希望在StructType
上使用constness,我想如果有必要,您可以随时使用reinterpret\u cast
。无论哪种方式,您都会返回一个副本,所以如果它是常量
,这有关系吗?对不起,我忘了把它作为参考。已修复。常量映射
隐式地具有常量
值类型。即使如此,也不必返回带有常量值的映射。所有允许非常量访问映射值的成员函数也是非常量的,因此不能在常量引用上调用。唯一的方法是丢弃常量
。如果返回引用是非常量,但您希望在StructType上使用constness
,我想如果有必要,您可以始终使用reinterpret\u cast
。
struct X
{
map<int, StructType> m;
const map<int, StructType>& GetConstMap() const { return m; }
}