簡體   English   中英

C ++ 11構造函數參數:std :: move和value或std :: forward和rvalue參考

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM