我确信我的问题已在此处得到解答,但我无法找到它。如果是这样,请将其标记为重复 - 谢谢!
这是MCVE:
#include <map>
#include <stdio.h>
using foo = struct foo
{
int foo2;
foo() { printf( "In foo contructor.\n" ); }
};
std::map<int, foo> bar;
int main()
{
bar [1] = {};
}
输出:
In foo contructor.
In foo contructor.
为什么foo
构造函数被调用两次?为了只调用一次,我需要更改什么?
编译器:gcc 4.9.3
编译器标志:-O3 -std=c++11 -Wall -Werror -Wextra
答案 0 :(得分:3)
operator[]
已经默认构建其mapped_value
,即使您没有分配它。然后,您的分配默认构造一个右值,然后将其移动分配到键mapped_value
的{{1}}。
你看过https://jsfiddle.net/2kv6Ldom/1/了吗?它可能会做你想做的事。