c++ - 带有 make_unique 和 emplace_back 的简单结构

标签 c++ unique-ptr emplace

给定一个结构:

struct S {
    int x;
    int y;
}

为什么标准允许我们这样做:

std::vector<S> vec;
vec.emplace_back(1, 2);

但不允许这样做:

auto ptr = std::make_unique<S>(1, 2);

?

最佳答案

实际上两者都不起作用。

已决定 C++ std 中的 emplace 样式构造函数将使用 () 而不是 {} 来构造。没有强有力的选择它的理由(据我所知)。

emplace_altmake_unique_alt 可以添加到 std 中,它使用 {} 构造。 (当然应该取一个更好的名字)

所以简短的回答是“因为 std 这么说”。中等答案是“这是 std 做出的近乎任意的选择,其他地方也遵循以保持一致”。长答案将涉及到它发生的房间和重新访问的房间:这不是一个长答案。

关于c++ - 带有 make_unique 和 emplace_back 的简单结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38322961/

相关文章:

c++ - 如何使用函数指针从其内存地址调用成员函数?

c++ - 访问 3 channel 矩阵的元素

c++ - 我无法将 'fill' std::vector 构造函数与 unique_ptrs 一起使用

c++ - 无法将具有 unique_ptr 的对象 push_back 到 std::vector

c++ - 在循环中将相同的 unique_ptr 移动到函数中

c++ - std::map::emplace 无法解析,但插入右值有效——为什么?

c++ - emplace 的性能比 check 后跟 emplace 差

C++速度比较迭代器与索引

c++ - C++ 中循环的替代方案