什么时候std :: map调用映射类型的构造函数?

Que*_*onC 2 c++ c++03

如果我有这样的容器....

std::map <std::string, IHaveAReallyExpensiveConstructor_t>
Run Code Online (Sandbox Code Playgroud)

我保证IHaveAReallyExpensiveConstructor_t()只有在地图中创建一个新元素时才会调用构造函数,比如说std::map::operator[]

如果重要,只有默认构造很难.复制结构很便宜,而不是真正的问题.

Mik*_*our 5

在C++ 11中,operator[]是唯一std::map需要mapped_value默认构造的操作; 所以这是唯一可以默认构造一个值的操作.emplace如果您不提供任何构造函数参数,也将默认构造一个值.

如果您的实现不符合C++ 11,则无法保证其他操作不会构造值; 但没有理由为什么任何理智的实施.