为什么STL映射不是[]运算符const? [英] Why isn't the [] operator const for STL maps?
问题描述
为了这个问题,有一个例子:
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
}
为什么是[]运算符非const?
This has always bugged me. Why is the [] operator non-const?
推荐答案
std :: map
, operator []
会将索引值插入容器中,如果以前不存在的话。
For std::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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!