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?