[英]C++11 constructor argument: std::move and value or std::forward and rvalue reference
以下兩個中的哪一個是首選,為什么?
struct X {
Y data_;
explicit X(Y&& data): data_(std::forward<Y>(data)) {}
};
VS
struct X {
Y data_;
explicit X(Y data): data_(std::move(data)) {}
};
兩種變體在功能上有所不同。 以下語句適用於第二個語句,但不適用於第一個語句:
Y y;
X x(y);
如果您正在尋找相同的功能,則兩個變體應如下所示:
struct X
{
Y data_;
explicit X(const Y& data) : data_(data) { }
explicit X(Y&& data) : data_(std::move(data)) { }
};
struct X
{
Y data_;
explicit X(Y data) : data_(std::move(data)) { }
};
第一個變體節省了一次移動操作,而第二個變體寫得更少。 因此,答案是:只要您沒有理由優化性能,請使用后者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.