#include #include #include //We will discuss C++ reference types as a solution to avoid coing too many copies. //A simple class class Class1 { private: std::vector a; public: Class1() = default; //default constructor Class1(int a_): a({a_}) {}; //our not so reasonable constructor ~Class1() = default; //default destructor Class1(Class1&&) = default; //move constructor Class1& operator=(Class1&&) = default; //move assignment //this by default deletes copy constructor and copy assignment operator int() const {return a.size();}; //a silly default conversion Class1 operator*(int other) {return a.size() ? Class1(a[0]*other): Class1();} }; //If we want to make us int function_consuming_class1(Class1 &&a){ return a; } //forwarding reference template requires std::is_same_v::type> T just_print_and_dont_touch(T&& t) { //either lvalue or rvalue referrence std::cout<<"Ja iba tlaciiim:"<(t); } void i_want_lvalue_reference(Class1 &) { return; } void i_want_rvalue_reference(Class1 &&) { return; } void i_want_const_lvalue_reference(const Class1 &) { return; } int main() { Class1 a; //default constructor Class1 b(10); //our constructor Class1 c(std::move(b)); //move constructor, do not use b further Class1 d; // d=c; //this fails, no copy assignent d = std::move(c); Class1 e = d*2; std::cout<