C++ 右值引用作为映射模板参数

C++ 右值引用作为映射模板参数,c++,stdmap,rvalue-reference,C++,Stdmap,Rvalue Reference,我不熟悉rvalue reference和std::move概念。我试图创建std::map,它的第二个模板参数是一个右值引用 我有一门课: class-DebugClass { 公众: int-num; DebugClass()=删除; DebugClass(常量DebugClass&rhs)=删除; DebugClass和运算符=(常量DebugClass和rhs)=删除; 调试类(int num):num(num) { printf(“构造函数”\n); } DebugClass(Debu

我不熟悉
rvalue reference
std::move
概念。我试图创建
std::map
,它的第二个模板参数是一个右值引用

我有一门课:

class-DebugClass
{
公众:
int-num;
DebugClass()=删除;
DebugClass(常量DebugClass&rhs)=删除;
DebugClass和运算符=(常量DebugClass和rhs)=删除;
调试类(int num):num(num)
{
printf(“构造函数”\n);
}
DebugClass(DebugClass&&rhs)
{
printf(“移动构造函数\n”);
此->num=rhs.num;
}
DebugClass&运算符=(const DebugClass&&rhs)
{
printf(“右值赋值\n”);
此->num=rhs.num;
}
};
我就是这样使用它的:

void foo(DebugClass&&dbgClass)
{
std::map myMap;
insert(std::pair(1,std::move(dbgClass));
printf(“%d\n”,myMap[1].num);
}
int main()
{
foo(二级);;
}
我希望能够看到以下输出:

constructor
move constructor
2
但是我得到了一个编译错误:

Severity    Code    Description Project File    Line    Suppression State
Error   C2832   'std::pair<const _Kty,_Ty>::second': a reference type cannot be value-initialized   Tests   c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\tuple   1304    

严重性代码描述项目文件行抑制状态
错误C2832“std::pair::second”:无法对引用类型进行值初始化测试c:\program files(x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\tuple 1304

如何将我的
foo
参数移动到
myMap
中?

您不能在容器中存储引用,因为引用不是对象,它是引用已存在对象的别名。像
map
这样的容器只能存储其他对象。@rafix07-那么如何更改该代码以便打印所需的输出呢?因为
DebugClass
不是默认可构造的,所以不能使用
map::operator[]
而使用了
find
。@rafix07太棒了!谢谢您不能在容器中存储引用,因为引用不是对象,它是引用已存在对象的别名。像
map
这样的容器只能存储其他对象。@rafix07-那么如何更改该代码以便打印所需的输出呢?因为
DebugClass
不是默认可构造的,所以不能使用
map::operator[]
而使用了
find
。@rafix07太棒了!非常感谢。