为什么 STL 映射的 [] 运算符不是 const?

Why isn#39;t the [] operator const for STL maps?(为什么 STL 映射的 [] 运算符不是 const?)
本文介绍了为什么 STL 映射的 [] 运算符不是 const?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了这个问题,人为的例子:

Contrived example, for the sake of the question:

void MyClass::MyFunction( int x ) const
{
  std::cout << m_map[x] << std::endl
}

这不会编译,因为 [] 运算符是非常量的.

This won't compile, since the [] operator is non-const.

这很不幸,因为 [] 语法看起来很干净.相反,我必须这样做:

This is unfortunate, since the [] syntax looks very clean. Instead, I have to do something like this:

void MyClass::MyFunction( int x ) const
{
  MyMap iter = m_map.find(x);
  std::cout << iter->second << std::endl
}

这一直困扰着我.为什么 [] 运算符是非常量的?

This has always bugged me. Why is the [] operator non-const?

推荐答案

对于std::mapstd::unordered_mapoperator[] 会将索引值插入到容器中.这有点不直观,但就是这样.

For std::map and std::unordered_map, operator[] will insert the index value into the container if it didn't previously exist. It's a little unintuitive, but that's the way it is.

由于必须允许失败并插入默认值,因此该运算符不能用于容器的 const 实例.

Since it must be allowed to fail and insert a default value, the operator can't be used on a const instance of the container.

http://en.cppreference.com/w/cpp/container/map/operator_at

这篇关于为什么 STL 映射的 [] 运算符不是 const?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Rising edge interrupt triggering multiple times on STM32 Nucleo(在STM32 Nucleo上多次触发上升沿中断)
How to use va_list correctly in a sequence of wrapper functions calls?(如何在一系列包装函数调用中正确使用 va_list?)
OpenGL Perspective Projection Clipping Polygon with Vertex Outside Frustum = Wrong texture mapping?(OpenGL透视投影裁剪多边形,顶点在视锥外=错误的纹理映射?)
How does one properly deserialize a byte array back into an object in C++?(如何正确地将字节数组反序列化回 C++ 中的对象?)
What free tiniest flash file system could you advice for embedded system?(您可以为嵌入式系统推荐什么免费的最小闪存文件系统?)
Volatile member variables vs. volatile object?(易失性成员变量与易失性对象?)