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; }
}