std :: map在[]上调用默认构造函数,在insert()上复制构造函数

时间:2018-06-09 01:18:20

标签: c++ stdmap

我的std :: map被称为uniformBlocks。当我注意到一些奇怪的东西时,我正在测试添加新元素的方法。当我使用以下方法添加新密钥,值对时:

uniformBlocks["MatrixBlock"] = matrixBlock;

调用默认构造函数。但是,当我使用insert时,会调用复制构造函数,这是预期的。

uniformBlocks.insert(
    std::pair<const std::string, glWrapper::UBO>("MatrixBlock", matrixBlock)
);

为什么两种方法之间存在差异。他们在引擎盖下以同样的方式实施了吗?

1 个答案:

答案 0 :(得分:4)

[]创建一个对象(如果该对象不存在),然后返回对它的引用。那时,没有任何论据可供使用。

=然后分配给此引用。

insert没有必要这样做。它可以使用您传入的对来简单地构建。

谨慎使用后,emplace甚至可以取消复制或移动ctor电话。