7
下面是用作地图的价值类:为什么在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 < 10; ++i)
{
Book b(i);
mapBooks[ i ] = b;
}
导致错误的语句是:
mapBooks[ i ] = b;
如果我添加一个默认的构造函数,错误不会出现。但是,我不明白为什么需要。谁能解释一下?如果我使用insert()
,则不会出现该问题。
顺便说一下,我使用Visual C++ 2008进行编译。
确切地说,'operator []'不分配,但返回对新创建值的引用。分配是用户代码。 – 2010-02-27 09:58:08
@dribeas:是的,没错。我将更新为学者! – 2010-02-27 10:09:15