Quindi, la mia domanda è semplice:Un costruttore/assegnamento predefinito è infastidito da noexcept o constexpr?
C'è qualche punto nello specificare un costruttore della classe in default come noexcept
o constexpr
(o qualsiasi altra cosa si potrebbe cosa)?
struct foo
{
foo() = default;
// vs
constexpr foo() noexcept = default;
// same thing would apply for copy/move ctors and assignment operators
};
I due si comportano allo stesso modo?
Dipende se la classe è POD? Ad esempio con l'esempio precedente entrambi si comporterebbero allo stesso modo, mentre se ad esempio avessi un membro privato std::vector<int> v = { 1, 2, 3, 4 };
che utilizza l'assegnazione in classe, foo() = default;
per impostazione predefinita non sarà noexcept
e non constexpr
.
Scrivendo foo() = default;
il compilatore sceglie la migliore versione: noexcept
se possibile e constexpr
se possibile, ecc.?
Spero che la domanda sia chiara!