2016-08-03 7 views
0

Wie funktioniert die Geschwindigkeit des Standardkonstruktors, der Copykonstruktor und der bewegen Konstruktor zueinander wie std::array für ein Aggregat Typ vergleichen, die speichert integrierte in Typ-Elementen?C++ 11 Aggregates & Konstrukteurs-Geschwindigkeitsvergleich

Intuitiv würde ich sagen move> default> kopieren (je größer desto schneller).

Ist das korrekt?

+0

Es hängt von der Art der Elemente ab, die im 'Array' gespeichert sind. Könnte move = default = copy oder move = copy> default oder eine beliebige Kombination sein. – user975989

+0

Sie haben Recht. Ich habe tatsächlich über eingebaute Typen nachgedacht. Ich korrigiere das in meiner Frage. – Corvinus

+0

Nun verschieben = kopieren für eine eingebaute, so kopieren/verschieben ist das gleiche wie ein memcpy Äquivalent und Standard ist ein Memset entspricht (möglicherweise SIMD, etc). Egal, ich log, Standard ist kein Memset, es ist nur nicht initialisiert. – user975989

Antwort

1

Der Standard Konstruktor einer std::array, die eine eingebaute (wie float, int, etc.) wäre die schnellste, gefolgt von bewegen und Kopie (die in äquivalenter Weise schnell sein würde).

std::array ist ein Aggregat, so dass der Standard Konstruktor nichts tut. Wie auf cppreference angegeben

beachten Sie, dass Standardinitialisierung

Hinweis auf unbestimmte Werte für nicht-Klasse T führen kann, da diese die Einbauten sind, verschieben und kopieren sind ganz die gleiche Leistung klug, da Sie können eine integrierte Datei nicht schneller als kopieren kopieren.

Also für eine std::array ist die Reihenfolge Standard>bewegen == Kopie.

Dies gilt nicht unbedingt für Aggregate, die Nicht-Einbauten enthalten, aber gilt für Aggregate, die nur Einbauten oder andere Aggregate enthalten, die nur Einbauten enthalten.