Итак, мой вопрос прост:
Есть ли смысл в определении конструктора класса дефолта в 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 если это возможно, и т.д.?