jas*_*ine 7 c++ dictionary stl default-constructor
下面是用作地图中值的类:
class Book
{
int m_nId;
public:
// Book() { } <----- Why is this required?
Book( int id ): m_nId( id ) { }
};
Run Code Online (Sandbox Code Playgroud)
在main()内:
map< int, Book > mapBooks;
for( int i = 0; i < 10; ++i )
{
Book b( i );
mapBooks[ i ] = b;
}
Run Code Online (Sandbox Code Playgroud)
导致错误的声明是:
mapBooks[ i ] = b;
Run Code Online (Sandbox Code Playgroud)
如果我添加默认构造函数,则不会出现错误.但是,我不明白为什么需要.谁能解释一下?如果我使用insert(),问题不会出现.
顺便说一句,我正在使用Visual C++ 2008进行编译.
CB *_*ley 11
operator[]执行两步过程.首先,它找到或创建给定键的映射条目,然后返回对条目的值部分的引用,以便调用代码可以读取或写入它.
在之前不存在条目的情况下,条目的值的一半需要在分配之前进行默认构造.这就是接口需要工作的方式,以便与条目已存在的情况保持一致.
如果需要在地图中使用这样的类型,那么你必须避免operator[]使用find和insert"手动".