繁体   English   中英

使用make_unique和emplace_back的简单结构

[英]simple structs with make_unique and emplace_back

给定一个结构:

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使用() s而不是{} s构造emplace样式的构造函数。 没有强有力的理由选择这个(我知道)。

emplace_altmake_unique_alt可以添加到使用{}构造的std中。 (自然应该选择一个更好的名字)

所以简短的回答是“因为std这么说”。 中等答案是“它是由std做出的几乎任意选择,其他地方一致”。 长的答案将涉及到它发生的房间和重新审视的地方:这不是一个长期的答案。

请检查您的代码。

在cpp14中,您的示例代码无法编译: https ://ideone.com/ewyHW6

make_uniqueemplace_back都在后台使用std::forward<Args>(args)...所以要么两者都编译,要么都不编译。

暂无
暂无

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

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