Ist ein standardmäßiger Konstruktor / eine standardmäßige Zuweisung noexcept / constexpr?

Also, meine Frage ist einfach:

Ist es sinnvoll, einen standardmäßigen Klassenkonstruktor als @ anzugebenoexcept oderconstexpr (oder irgendetwas anderes, woran du denken könntest)?

struct foo
{
   foo() = default;
   // vs
   constexpr foo() noexcept = default;

   // same thing would apply for copy/move ctors and assignment operators
};

Würden sich die beiden gleich verhalten?

Kommt es darauf an, ob die Klasse POD ist? Zum Beispiel mit dem obigen Beispiel würden sich beide gleich verhalten, während wenn ich zum Beispiel ein privates Mitglied hättestd::vector<int> v = { 1, 2, 3, 4 }; die In-Class-Zuweisung verwendet,foo() = default; wäre standardmäßig nichtnoexcept und nichtconstexpr.

Durch das Schreibenfoo() = default; wählt der Compiler nur die beste Version aus:noexcept wenn möglich undconstexpr wenn möglich, etc?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage