Witam !
Mam taki kod
class Temp {
public:
Temp(int a): a_{a} {std::cout << "Temp" << std::endl;}
Temp(const Temp& t): a_{t.a_} {std::cout << "copy Temp" << std::endl;}
Temp(Temp&& t): a_{t.a_} {std::cout << "move Temp" << std::endl;}
auto show() {
return a_;
}
private:
int a_{};
};
template <typename T>
void func(T t) {
std::cout << t.show() << std::endl;
}
int main() {
Temp t{100};
func(t);
func(std::move(Temp{3}));
}
output to:
Temp
copy Temp
100
Temp
move Temp
3
Tak jak się spodziewałem. Tylko teraz jak zamienie typ argumentu w void func(T t)
na void func(T&& t)
to output mam
Temp
100
Temp
3
Dlaczego nie ma tutaj wywołania konstruktora przenoszącego move Temp
?
template< typename T >
w połączeniu zT &&
to tzw.perfect forwarding
.