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