Тази част от кода
#include <tuple>
struct Foo
{
Foo(const int& value):value_(value){}
//Foo(const Foo&)=delete; // delete copy constructor
int value_;
};
int main()
{
std::tuple<Foo> tup(std::move(Foo(1)));
return 0;
}
работи добре, но ако изтриете конструктора за копиране Foo
, той се проваля със следната грешка при компилиране: използване на изтрита функция Foo::Foo(const Foo&)
.
Но тъй като казвам изрично, че обектът може да бъде преместен, защо конструкторът std::tuple
използва конструктора за копиране Foo
вместо неговия движещ се конструктор? Как мога да наложа std::tuple
да се конструира, като премести екземпляра Foo
, вместо да го копира?
Foo&&
и той се изтрива. - person Quentin   schedule 28.09.2015Foo(const Foo&& foo){value_=foo.value_;}
. Прав ли съм? По този начин Foo може да ме премести, а не да копира. - person Marco Agnese   schedule 28.09.2015const
аргументи, са безполезни. Вижте моя отговор. - person Jonathan Wakely   schedule 28.09.2015std::move
с аргумент, който вече е rvalue - person Piotr Skotnicki   schedule 28.09.2015