[英]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_alt
和make_unique_alt
可以添加到使用{}
构造的std
中。 (自然应该选择一个更好的名字)
所以简短的回答是“因为std
这么说”。 中等答案是“它是由std
做出的几乎任意选择,其他地方一致”。 长的答案将涉及到它发生的房间和重新审视的地方:这不是一个长期的答案。
请检查您的代码。
在cpp14中,您的示例代码无法编译: https ://ideone.com/ewyHW6
make_unique
和emplace_back
都在后台使用std::forward<Args>(args)...
所以要么两者都编译,要么都不编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.