В качестве темы соответствующий код:
#include <iostream>
class ABC
{ public:
ABC()
{
std::cout<< "default construction" << std::endl;
}
ABC(const ABC& a)
{
std::cout << "copy construction" << std::endl;
}
ABC(const ABC&& a)
{
std::cout << "move construction" << std::endl;
}
};
int main()
{
ABC c1 = ABC();
return 0;
}
Вывод с -fno-elide-constructors -std = c ++ 11
default construction
move construction
Если i удалите конструктор перемещения выше , тогда результат будет:
default construction
copy construction
почему copy construction
можно использовать, а move constructor
был удален? Видите ли, если существует определенный пользователем move constructor
, компилятор предпочитает использовать move constructor
.
Согласно некоторой документации, компилятор предоставляет значение по умолчанию move constructor
. ** Так почему бы компилятору не использовать значение по умолчанию move constructor
? Я новичок в C ++. Буду признателен за помощь с этим вопросом.