下面是用作映射中的值的类:
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[]
执行两步过程。首先它发现或创造给定键的映射条目,然后返回对该条目的值部分的引用,以便调用代码可以读取或写入它。
如果条目之前不存在,则在分配之前需要默认构造条目的一半值。这正是界面需要与条目已存在的情况保持一致的工作方式。
如果需要在地图中使用这种类型,那么您必须避免使用operator[]
通过使用find
and insert
“手动”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)