将引用作为值的std::unordered_map不起作用

std::unordered_map with references as values does not work?

本文关键字:unordered map 不起作用 std 引用      更新时间:2023-10-16

此代码无法在Visual Studio 2013:中编译

#include <iostream>
#include <unordered_map>
class MyClass
{
public:
    char a;
};
int main()
{
    std::unordered_map<int, MyClass&> MyMap;
    MyClass obj;
    obj.a = 'a';
    MyMap.emplace(1, obj);
    std::cout << MyMap[1].a;
}

带有这些错误消息:

Error   1   error C2440: 'initializing' : cannot convert from 'int' to 'MyClass &'  c:program files (x86)microsoft visual studio 12.0vcincludetuple    746
Error   2   error C2439: 'std::pair<const _Kty,_Ty>::second' : member could not be initialized  c:program files (x86)microsoft visual studio 12.0vcincludetuple    746

当我把它改为指针时,它编译得很好。引用作为std::unordereded_map中的值类型无效吗?

同样的代码也适用于boost::unordered_map。

引用不可复制,也不可赋值。它们在任何标准库容器中都不支持作为值类型。

您可以通过存储std::reference_wrapper<MyClass>MyClass*

如果对容器进行了大量操作,则容器值必须是可复制的或可移动的。显然,有了参考文献,这是不可能的。因此,您的程序是非法的。