Я знаю, что вместо написания:
class A {
public:
A(A&&) noexcept = default;
};
Лучше писать
class A {
public:
A(A&&) noexcept;
};
inline A::A(A&&) noexcept = default;
Причины, о которых я слышал:
-
Он избегает конструктора, который
deleted. Компилятор выдаст ошибку, если он не может определить функцию. -
Конструктор перемещения объявляется
noexceptдаже если некоторые из конструкторов перемещения полей элементов не аннотируются сnoexcept.
Может ли кто-нибудь объяснить немного больше об теории различий?