Dar*_*721 4 c++ dictionary initialization stdmap
我正在做一个简单的地图程序,但最终提出了这个问题。C++ 文档是这样说的:
访问元素 如果 k 与容器中元素的键匹配,则该函数返回对其映射值的引用。如果 k 与容器中任何元素的键都不匹配,则该函数将插入具有该键的新元素并返回对其映射值的引用。请注意,即使没有为元素分配映射值(该元素是使用其默认构造函数构造的),这始终会将容器大小增加一。
我真正不明白的部分是它说“元素是使用其默认构造函数构造的”。
我尝试了一下并做了这个
std::map<string, int> m;
m["toast"];
Run Code Online (Sandbox Code Playgroud)
我只是想看看“toast”的映射元素是什么值。最终结果为零,但是,为什么呢?基本类型有默认构造函数吗?或者发生了什么?
“使用其默认构造函数”的说法令人困惑。更准确地说,对于std::map::operator[],如果键不存在,则插入的值将被值初始化。
当使用默认分配器时,这会导致键被复制构造为键,并且映射的值被值初始化。
对于int
,它意味着零初始化。
4) 否则,该对象被零初始化。