2
我确信我的问题已经在这里回答了,但我无法找到它。如果是这样,请将其标记为重复 - 谢谢!重复的构造函数调用
这里是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
OK。我知道我需要时间直到我理解整个机制。用'emplace()'它可以工作。谢谢! –
@AlBundy在cppreference上查看'std :: map :: operator []'和'std :: map :: operator ='的文档。这些文章将帮助您了解如何以及何时在'std :: map'内部创建对象。 – KABoissonneault
@KABoissonneault,我知道有一次'bar'操作,那是什么时候?为了'{}'构造一个'foo'对象? – BlackMamba