1
값으로 A를 사용하는 첫 번째 예제는 두 번의 이동을 수행하고 refref를 통한 이동은 한 번만 수행합니다. 그 차이점은 무엇입니까? cppreference.com 가입일이 예제에서 이동과 앞으로가 다릅니다.
struct A
{
A() { cout << "constructor" << endl;}
A(const A&) { cout << "copy constructor " << endl;}
void operator=(const A&) { cout << "assignment operator" << endl; }
A(A&&) { cout << "move copy constructor" << endl;}
void operator=(A&&) { cout << "move assignment operator" << endl;}
};
struct C {
void func(A t) {
d.a = std::move(t);
}
struct Data {
A a;
};
Data d;
};
struct B {
void func(A t) {
C c;
c.func(std::move(t));
}
};
//////////////////////////////////////////////////////////
struct C {
template<class T>
void func(T&& t) {
d.a = std::forward<T>(t);
}
struct Data {
A a;
};
Data d;
};
struct B {
template<class T>
void func(T&& t) {
C c;
c.func(std::forward<T>(t));
}
};
이 "보편적 참조"꽤 관련 설명이다 그들은 표준 : move'와'표준'에 관한 방법 :: forward' : http://scottmeyers.blogspot.com/2012/11/on-superfluousness-of-stdmove.html –
내가 이해하는 한, 그들은이 경우에도 똑같이 행동해야합니까? – hidayat