Warum dies:Explizit gelöscht Bewegung Konstruktor
struct A
{
A(int) {
cout << "construct from int" << endl;
}
A(A&&) = delete;
A(const A &) {
cout << "copy constructor" << endl;
}
};
int main(){
A a = 0;
}
gibt mir eine Fehlermeldung:
error: use of deleted function ‘A::A(A&&)’
Und warum, wenn ich solchen Schritt Konstruktor
A(A&&) {
cout << "move constructor" << endl;
}
es kompiliert gut, aber Programm ist hinzufügen Ausgabe ist nur
construct from int
So weit ich verstehe, fragt der Compiler nach dem Konstruktor, verwendet ihn aber nicht. Warum? Das ergibt für mich keinen Sinn.
P.S. Ich gehe davon aus, dass
A a = 0;
Vorbehalte, von
istA a = A(0);
aber warum weder bewegen noch Konstruktor verschieben Zuweisungsoperator genannt wird?
Welche Compiler verwenden Sie? – Brotcrunsher
Dies wurde in C++ 17 geändert (der Konstruktor für gelöschte Bewegungen kompiliert jetzt), aber das Kopieren/Verschieben von Elision war immer eine Sache davor. – chris
Ich versuchte es auf g ++ 4.9, g ++ 6.3 und auf 5.0 alle gleich. (-O0 -std = C++ 11) –