首页 > 解决方案 > std::unordered_map::at 如何作为左值工作?

问题描述

据我所知,函数输出通常是右值。如http://www.cplusplus.com/reference/unordered_map/unordered_map/at/的示例所示,我们可以使用如下赋值映射值:

mymap.at("Mars") = 3396;

这样的事情是如何工作的?

标签: c++stlstd

解决方案


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;只有当mymapis non-时才会起作用const,因为返回值是对 non- 的引用const mapped_type,因此是可写的。但如果mymapis将无法编译const,因为返回值将是对 a 的引用const mapped_type,因此是只读的。例如:

const int i = 0;
const int &r = i;
r = 3396; // ERROR

推荐阅读