std::map的operator[]

没怎么用STL,有点忘记了. 有一个定义:

 

class A
{
public:

    void func() const
    {
        m_map[4];
    }

    std::map< int, int > m_map;
};

不幸的是编译错误: error C2678: binary '[' : no operator found which takes a left-hand operand of type 'const std::map<_Kty,_Ty>' (or there is no acceptable conversion)

原因是, operator[]有可能会改变map内部结构(插入) , 因此一个保证不改变类成员变量的函数(安全的)去调用一个没有保证的函数(非安全的)是肯定是不可行的.

Effective C++ 3 里也有讲到, 一个非const 成员函数去调用一个const成员函数才是可取的, 前提是要把返回值const_cast一把.

你可能感兴趣的:(std::map的operator[])