包含引用的STL映射无法编译

Oli*_*eng 8 c++ stl reference map

下列:

std::map<int, ClassA &> test;
Run Code Online (Sandbox Code Playgroud)

得到:

error C2101: '&' on constant
Run Code Online (Sandbox Code Playgroud)

而以下

std::map<ClassA &, int> test;
Run Code Online (Sandbox Code Playgroud)

error C2528: '_First' : pointer to reference is illegal
Run Code Online (Sandbox Code Playgroud)

后者似乎地图不能包含密钥值的参考,因为它需要有时实例化类和参考不能没有一个对象被实例化.但为什么第一种情况不起作用呢?

aca*_*bot 16

在stl容器中存储引用是非法的,因为类型必须是可复制构造和可分配的.无法分配参考.

究竟什么操作导致第一个错误是依赖于实现的,但我认为它与创建引用有关,而不是立即分配它.第二条错误消息看起来与构建映射索引实际相关.

如果您的类型很小,您可以将其复制到地图中,或者如果它很大,请考虑使用指针,但请记住容器不会为您释放对象,您必须自己明确地执行此操作.

这个 SO问题可能是你的兴趣.