(Veröffentlicht dies zunächst als Kommentar, sondern ermutigt als Antwort auf Beitrag.)
einfach, nein. Eine Funktion, die gelöscht wird, kann nicht aufgerufen werden (oder im Falle eines Konstruktors verwendet werden, um ein Objekt zu initialisieren), geschweige denn eine Ausnahme auslösen.
Edit:
hvd in den Kommentaren unter diesem noexcept(f())
erwähnt ist f()
nicht nennen. Wenn der Konstruktor der Klasse A
delete
d ist, wird noexcept(A())
nicht kompiliert, unabhängig davon, ob der Konstruktor noexcept
deklariert ist. Dies ist (im Wesentlichen) eine Konsequenz der Anforderung, dass noexcept(expression)
einen gültigen Ausdruck erhalten muss - und ein Ausdruck A()
für eine Klasse A
erfordert einen gültigen Konstruktor.
Revolver_Ocelot weist auch korrekt darauf hin, dass es nicht möglich ist, über noexcept
zu überlasten (d. H. Es ist nicht möglich, zwei Funktionen mit der gleichen Signatur zu haben, außer dass eins noexcept
ist und eins nicht). Innerhalb einer Definition der Klasse A
haben sowohl A() = delete
als auch A() noexcept = delete
beide den gleichen Effekt, d.h. Klasse A
, die keinen Konstruktor ohne Argument haben.
Einfach, nein. Eine Funktion, die gelöscht wird, kann nicht aufgerufen werden (oder im Falle eines Konstruktors verwendet werden, um ein Objekt zu initialisieren), geschweige denn eine Ausnahme auslösen. – Peter