簡體   English   中英

C ++ 11 - 元組和移動語義

[英]C++11 - tuple and move semantics

這個示例代碼應該編譯嗎? clangg++接受它,而icc 14拒絕這樣做,抱怨auto t = ... std::unique_ptr的拷貝構造函數是未定義的。

#include <iostream>
#include <memory>
#include <tuple>

std::tuple<std::unique_ptr<int[]>, int> foo()
{
    std::unique_ptr<int[]> a;
    unsigned int b;
    auto t = std::make_tuple(std::move(a), b); 
    return std::move(t);
}

int main()
{
    foo();
}

我認為它應該編譯: std::make_tuple()的結果是一個臨時的std::tuple<T...> ,它應該移動構造它的成員。 更准確地說, std::tuple<T...>的移動構造函數是默認的,這應該導致成員移動構造。

顯然,沒有必要將std::make_tuple()的結果std::make_tuple() t 如果您選擇引入此變量,則返回時不應該std::move(t) :當return語句中的表達式是局部變量時,無論如何它都被視為rvalue。 但是,額外的std::move()禁止復制/移動省略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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