Итак, мой вопрос прост:
Есть ли смысл в определении конструктора класса дефолта в noexcept
или constexpr
(или любая другая вещь вы могли бы вещь)?
struct foo
{
foo() = default;
// vs
constexpr foo() noexcept = default;
// same thing would apply for copy/move ctors and assignment operators
};
Будут ли два поведения одинаковыми?
Это зависит от того, является ли класс POD? Например, в приведенном выше примере оба будут вести себя одинаково, тогда как если бы у меня был частный член std::vector<int> v = { 1, 2, 3, 4 };
который использует назначение класса, foo() = default;
по умолчанию не будет noexcept
и не constexpr
.
Написав foo() = default;
компилятор просто выбирает лучшую версию: noexcept
если это возможно, и constexpr
если это возможно, и т.д.?