【发布时间】:2014-04-15 10:55:06
【问题描述】:
以下两个应该首选哪个,为什么?
struct X {
Y data_;
explicit X(Y&& data): data_(std::forward<Y>(data)) {}
};
对
struct X {
Y data_;
explicit X(Y data): data_(std::move(data)) {}
};
【问题讨论】:
-
POD 没有用户定义的构造函数!我更喜欢第二个,因为第一个不会绑定到左值。另外,第一个应该是
std::forward<Y>(data)。 -
请将第一个中的
std::forward替换为std::move。std::forward仅与模板参数结合使用才有意义。 -
为
forward添加了模板参数 -
@Praetorian 据我所知,POD 可以有用户定义的构造函数(!=聚合)。但是,不能有用户定义的默认、复制或移动构造函数(或 dtor)。
-
@dyp 我的印象是 POD 是一个聚合,其成员也是 POD,即要求比聚合更严格。目前无法检查...
标签: c++ c++11 move-semantics rvalue-reference copy-elision