2013-03-04 8 views
13

Hier ist ein Auszug aus der Dokumentation von std :: is_copy_constructible (1) und std::is_trivially_copy_constructible (2) auf cppreference.com:Was sind die trivialen Operationen in std :: is_trivially_copy_constructible in C++

1) überprüft, ob ein Typ CopyConstructible, dh hat einen zugänglichen expliziten oder impliziten Kopierkonstruktor. Wenn die Anforderung erfüllt ist, wird ein Mitgliedskonstantenwert gleich True bereitgestellt, andernfalls ist der Wert false.

2) Wie (1), aber der Ausdruck des Kopierkonstruktors ruft keine Operation auf, die nicht trivial ist.

Was wird hier als eine triviale Operation betrachtet?

+2

[Dies] (http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are-they-special) –

+0

@AndyProwl helfen können: Sehr nützlich, danke. – vitaut

Antwort

15

Wie ich es once before setzen:

Also, was diese alle sind trivial und nicht-triviale Dinge?

Ein Kopieren/Verschieben Konstruktor für Klasse X ist trivial, wenn es nicht vom Benutzer zur Verfügung gestellt ist und wenn

- Klasse X hat keine virtuellen Funktionen (10.3) und keine virtuellen Basisklassen (10.1) und

- der Konstruktor ausgewählt kopieren/verschieben jede direkte Basisklasse Subobjekt trivial ist, und

- für jedes nicht-statisches Datenelement X, das von Klassentyp (oder Array davon), der Konstruktor auszuzuwählenden kopieren/verschieben dieses Mitglied ist trivial;

ansonsten ist der Copy/Move-Konstruktor nicht trivial.

Grundsätzlich bedeutet dies, dass eine Kopie oder verschieben Konstruktor trivial ist, wenn es nicht vom Benutzer zur Verfügung gestellt ist, hat die Klasse nichts virtuellen darin, und diese Eigenschaft gilt rekursiv für alle Mitglieder der Klasse und für die Basisklasse.

Verwandte Themen