Mit dem Aufkommen der Move-Semantik frage ich mich, ob diese spezielle Template-Technik, die von King in seiner dlib-Bibliothek implementiert wurde, immer noch nützlich ist, nachdem temporär erstellte Objekte mit Hilfe der move-Semantik den Besitz weitergeben können.Sind die in Dlib verwendeten Expression-Templates immer noch die in C++ 11 angegebene Move-Semantik?
Q
Sind die in Dlib verwendeten Expression-Templates immer noch die in C++ 11 angegebene Move-Semantik?
0
A
Antwort
0
Compiler automatisch nur Standard bewegen Konstruktor erstellen, wenn es keine benutzerdefinierten ist Bewegung Konstrukteuren für eine Klasse-Typ vorgesehen sind (Struktur, Klasse oder Vereinigung), und alle folgenden ist wahr:
- Es gibt keine von Benutzern deklarierten Kopierkonstruktoren;
- Es gibt keine vom Benutzer deklarierten Kopierzuweisungsoperatoren;
- Es gibt keine vom Benutzer deklarierten Zuweisungsoperatoren;
- gibt es keine vom Benutzer deklarierten Destruktoren;
- der implizit deklarierte Bewegung Konstruktor wird aufgrund von Bedingungen, die im nächsten Abschnitt nicht definiert als gelöscht detailliert,
Das ist, warum DLIB viel explizit definierte Bewegung Bauer hat in seinen Containern (array2d, DNN-Modul ...)
1
Die Expression-Template-Technik hat viel mehr zu bieten als nur das Vermeiden des Kopierens. Zum Beispiel kann der Compiler symbolische lineare Algebra durchführen, um ganze Ausdrücke in effizienter ausführenden Code umzuwandeln. Viele dieser Transformationen haben nichts mit der Vermeidung von Kopien zu tun.
Verwandte Themen
- 1. Speicherverluste, die immer noch in WPF 4 vorhanden sind
- 2. Strings enthalten die gleichen Zeichen, aber sind immer noch unterschiedlich
- 3. Sind Trigraphen immer noch gültig C++?
- 4. Sind die Vorteile von SFIO über STDIO noch immer gültig?
- 5. Sind konstante Iteratoren immer noch böse in C++ 14
- 6. Problem in Dlib für die Gesichtserkennung kompilieren
- 7. Ist DDE immer noch wichtig? Welche sind die Alternativen?
- 8. Ist C++ immer noch effektiv?
- 9. "Immer Auto verwenden" in C++ 11?
- 10. CreateFile überschreibt immer die angegebene Datei
- 11. Ist "lang" immer noch nützlich in C?
- 12. Immer die angegebene Anzahl von Dezimalstellen in PHP anzeigen (aufgerundet)
- 13. Was sind die am häufigsten verwendeten Teile von STL?
- 14. C# erwarte Aufgaben + Endlosschleife friert immer noch die UI ein
- 15. Unverpackte Tags sind immer noch da
- 16. Was sind die am häufigsten verwendeten Zeichenfolgetypen in C++ und wie konvertiert man sie?
- 17. Sind Sitzungsfixierungsangriffe in MVC 5 immer noch ein Problem
- 18. Was sind die am häufigsten verwendeten Tastenkürzel im Visual Studio?
- 19. C++ 11 Smartpointer immer statt neu/löschen?
- 20. rails button_to: deaktiviert => true zeigt immer noch die Schaltfläche
- 21. Python regex, in Multiline übereinstimmen, aber immer noch die Zeilennummer
- 22. User-Select kopiert immer noch in die Zwischenablage
- 23. -Code Ich habe noch nie in C++ 11
- 24. Obwohl magic_quotes ausgeschaltet sind, sind immer noch Strings entgangen?
- 25. Können Sie Radio Buttons haben, die nicht nebeneinander sind, aber immer noch in einer Radiogruppe arbeiten?
- 26. Sind EJBs immer noch nützlich? Und was sind die Spring Framework-Möglichkeiten, EJBs zu ersetzen?
- 27. Was sind die Unterschiede zwischen -std = C++ 11 und -std = gnu ++ 11?
- 28. Python: Variablen sind immer noch zugänglich, wenn sie in try oder if definiert sind?
- 29. Benutzerdefinierte Beitragstypen, die noch nicht in Widgets_init registriert sind?
- 30. Wenn die Requisiten für eine untergeordnete Komponente unverändert sind, wird sie von React noch immer gerendert?