c – 为什么在STL映射中用作值的类需要…中的默认构造函数?

前端之家收集整理的这篇文章主要介绍了c – 为什么在STL映射中用作值的类需要…中的默认构造函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
下面是用作地图中值的类:
class Book
{
    int m_nId;
public:
    // Book() { }  <----- Why is this required?
    Book( int id ): m_nId( id ) { }

};

在main()内:

map< int,Book > mapBooks;

for( int i = 0; i &lt 10; ++i )
{
    Book b( i );
    mapBooks[ i ] = b;
}

导致错误的声明是:

mapBooks[ i ] = b;

如果我添加默认构造函数,则不会出现错误.但是,我不明白为什么需要.谁有人解释一下?如果我使用insert(),则不会出现问题.

顺便说一下,我正在使用Visual C 2008进行编译.

解决方法@H_301_18@
operator []执行两步过程.首先,它查找或创建给定键的映射条目,然后返回对条目的值部分的引用,以便调用代码可以读取或写入它.

在之前不存在条目的情况下,条目的值的一半需要在分配之前进行默认构造.这就是界面需要工作的方式,以便与条目已存在的情况保持一致.

如果需要在地图中使用这样的类型,则必须通过使用find并插入“手动”来避免使用operator [].

猜你在找的C&C++相关文章