std :: map上[]运算符的声明是这样的:
T& operator[] ( const key_type& x );
Run Code Online (Sandbox Code Playgroud)
有没有理由不是这个?
T& operator[] ( const key_type& x );
const T& operator[] const ( const key_type& x );
Run Code Online (Sandbox Code Playgroud)
因为只要您需要在const方法中访问成员映射,这将非常有用.
inf*_*inf 84
从C++ 11开始std::map::at,提供了const和非const访问.
相反,如果元素不在地图中operator[],它将抛出std::out_of_range异常.
Luc*_*ore 80
operator[]在map中返回指定键的值,或者为该键创建一个新的value-initialized元素(如果它尚未存在),因此这是不可能的.
如果operator[]有const重载,添加元素将无法正常工作.
这回答了这个问题.备择方案:
对于C++ 03 - 您可以使用迭代器(这些const是非const耦合的find).在C++ 11中,您可以使用该at方法.
Cor*_*lks 16
这些答案是正确的,因为它operator[]具有添加密钥的语义(如果它不存在),但我想添加另一个透视图:
注意如何operator[]返回a T&.也就是说,它返回value与之关联的引用key.但是,如果有什么不key中map?我们该怎么回事?没有"null-reference"这样的东西,抛出异常会很烦人.
这是否是一个很好的理由operator[] const.如果您无法向map(或因为运营商const)添加任何内容,您会向用户返回什么,但他们正在寻找不存在的项目?这个问题的一个很好的解决方案是没有operator[] const.
如果密钥不存在,则(非const)operator[]创建密钥.
该const运算符的版本(如果存在)必须具有不同的语义,因为它无法添加新键.
我相信你会同意,具有明显不同语义的const非const重载将是一种蠕虫.因此,没有const提供版本.
但是有一个const find()成员,所以你可以在你的代码中使用它.
| 归档时间: |
|
| 查看次数: |
6038 次 |
| 最近记录: |