繁体   English   中英

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

[英]std::map calls default constructor on [], copy constructor on insert()

我的std :: map称为统一块。 当我发现有些奇怪的东西时,我正在测试添加新元素的方法。 当我添加新键时,请使用以下方法进行值对:

uniformBlocks["MatrixBlock"] = matrixBlock;

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

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

为什么这两种方法之间存在差异。 他们不是在后台执行相同的方法吗?

如果对象不存在,则[]创建一个对象,然后返回对该对象的引用。 当时,没有可用参数。

=然后分配给该参考。

insert不需要这样做。 它可以使用传入的对简单地就位构建。

仔细使用, emplace甚至可以取消复制或移动ctor调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM