std :: map上[]运算符的声明是这样的:
T& operator[] ( const key_type& x );
不是这个原因吗?
T& operator[] ( const key_type& x );
const T& operator[] const ( const key_type& x );
因为这在您每次需要以const方法访问成员映射时都会非常有用。
std :: map上[]运算符的声明是这样的:
T& operator[] ( const key_type& x );
不是这个原因吗?
T& operator[] ( const key_type& x );
const T& operator[] const ( const key_type& x );
因为这在您每次需要以const方法访问成员映射时都会非常有用。
Answers:
从C ++ 11开始std::map::at
,提供了const和非const访问。
相反,如果元素不在地图中operator[]
,它将抛出std::out_of_range
异常。
这些答案是正确的,因为它operator[]
具有在不存在的情况下添加键的语义,但是我想添加另一个观点:
注意如何operator[]
返回T&
。也就是说,它返回value
与相关联的的引用key
。但是,如果其中没有key
该map
怎么办?我们应该返回什么?没有“空引用”之类的东西,抛出异常会很烦人。
这将是没有理由的一个很好的理由operator[] const
。如果您无法添加任何内容map
(因为运算符为const
),但他们正在寻找不存在的商品,您会返回给用户什么呢?解决这个问题的一个好方法是不用operator[] const
。
T null_
在map对象中有一个成员并返回对该对象的const引用?
null_
?例如,如果T
是int
什么呢?