Why isn#39;t the [] operator const for STL maps?(为什么 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::map
和std::unordered_map
,operator[]如果之前不存在,code> 会将索引值插入到容器中.这有点不直观,但就是这样.
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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么 STL 映射的 [] 运算符不是 const?
基础教程推荐
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01