c++ - std::unordered_map::at 如何作为左值工作?
问题描述
据我所知,函数输出通常是右值。如http://www.cplusplus.com/reference/unordered_map/unordered_map/at/的示例所示,我们可以使用如下赋值映射值:
mymap.at("Mars") = 3396;
这样的事情是如何工作的?
解决方案
at()
返回对映射中值的引用。这在您链接到的页面上说明了很多:
mapped_type& at ( const key_type& k ); const mapped_type& at ( const key_type& k ) const;
返回对元素的映射值的引用,其中键
k
位于unordered_map
.
查看返回类型。&
手段参考。_
将值分配给引用会将值分配给被引用的事物。例如:
int i = 0;
int &r = i;
r = 3396;
r
为更新赋值i
。
更新:如评论中所述,at()
为const
和非const
unordered_map
对象重载。因此,mymap.at("Mars") = 3396;
只有当mymap
is non-时才会起作用const
,因为返回值是对 non- 的引用const
mapped_type
,因此是可写的。但如果mymap
is将无法编译const
,因为返回值将是对 a 的引用const mapped_type
,因此是只读的。例如:
const int i = 0;
const int &r = i;
r = 3396; // ERROR
推荐阅读
- nuxt.js - 当所有人都可以进行静态站点生成时,为什么我会选择 Gridsome/Gatsby 而不是 Nuxt/Next?
- angular - NullInjectorError:没有 SwUpdate 的提供者!运行 ng 测试时
- prolog - Prolog:语法错误:文件过程意外结束“(?-A)”不存在
- keras - 使用深度学习卷积神经网络的手势识别
- typescript - 为什么在这个对象类型交集的结果中,`constructor` 属性的类型与`Function` 相交?
- delphi - 根据 TreeView 中检查的项目创建 TabSheet 和 Frame
- docker - 如何在 Kubernetes 的 Pod 之间传输文件?
- xml - 如何为自定义对象检测创建自己的 Haar 级联分类器?
- java - AWS SES 审计
- java - GLSL 统一变量未更新