0
У меня есть класс AПочему C++ генерирует конструктор в следующем случае?
struct A{
A(){}
A(int x): d(x) {}
A(const A& a): d(a.d) {
std::cout << "copy construction" << std::endl;
}
A(A&& a): d(a.d){
std::cout << "move construction" << std::endl;
}
A& operator=(const A& a){
std::cout << "copy assignment" << std::endl;
d = a.d;
return *this;
}
A& operator=(A&& a){
std::cout << "move assignment" << std::endl;
d = a.d;
return *this;
}
int d;
};
и функции FUNC
A func(){
return A(3);
}
если я сделаю это
A x;
x = func();
выход "присваивание движение", как и ожидалось , но если я построить A, подобный этому
A x = func();
тогда ничего не печатается, как если бы C++ генерировал свой собственный конструктор перемещения и отказывается использовать определенный.
Я использую Visual Studio 14
Я бы очень хотел, чтобы это понять.
Благодарим за разъяснения.
Ницца и простота. – erip
Выполнено как в объединенном? Или вообще опущен как часть оптимизации компилятора? – CinCout
hm ok Я не знал этого поведения – bakkaa