gpt4 book ai didi

c++ - std::map emplace 因显式构造函数而失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:31 30 4
gpt4 key购买 nike

class A {
public:
explicit A(int x) {}
};

vector<A> v;
v.push_back(1); // compiler error since no implicit constructor
v.emplace_back(1); // calls explicit constructor

以上来自video大卫·斯通。我不明白的是为什么 emplace_back 调用显式构造函数?我在 C++ 标准中看不到任何内容使这合法。只有在听了 David Stone 的 youtube 视频后,我发现了这件事。

现在,我对 std::map 进行同样的尝试。

map<int, A> m;
m.insert(pair<int, A>(1, 2)); // compiler error since no implicit constructor
m.emplace(1, 2); // compiler error since no implicit constructor

为什么 emplace 在这里失败了?如果 emplace_back 可以显式调用构造函数,为什么 emplace 不做同样的事情?

最佳答案

emplace 方法通过使用 placement new operator 显式调用构造函数来插入元素。在放置到 map 中时,您需要单独转发参数来构造键和值。

m.emplace
(
::std::piecewise_construct // special to enable forwarding
, ::std::forward_as_tuple(1) // arguments for key constructor
, ::std::forward_as_tuple(2) // arguments for value constructor
);

关于c++ - std::map emplace 因显式构造函数而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43434691/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com