trivial vs. standard-layout vs. POD
In juristischer Hinsicht, was ist der Unterschied zwischen trivial-Typen, standard-layout-Typen und-PODs?
Speziell ist, ich wollen, um zu bestimmen, ob new T
unterscheidet sich von new T()
für alle template-parameter T
. Was der Typ Merkmale is_trivial
, is_standard_layout
und is_pod
soll ich wählen?
(Als Zwischenfrage, kann sich jeder diese Art Merkmale implementiert werden, ohne compiler-magic?)
- Ich denke, es ist ein wenig zu spät, das zu erwähnen. Aber für Leute, die eine detaillierte ausgearbeitete Antwort, hier der link. Überprüfen Sie die Antwort von R Martinho Fernandes stackoverflow.com/questions/4178175/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass es getan werden kann, in wirklich einfachen Worten gesagt, wenigstens ohne eine viel extra-Erklärung. Ein wichtiger Punkt ist die statische vs. dynamische Initialisierung, aber zu erklären, dass ein Laie würde mehrere Seiten in sich...
Hülsen wurden (mis -), definiert, die in C++98. Es sind wirklich zwei getrennte Absichten beteiligt, weder kommt sehr gut zum Ausdruck: 1), dass, wenn Sie kompilieren eine C-struct-Deklaration in C++, was man bekommt, sollte äquivalent zu dem, was Sie hatte, in C. 2) EINE Kapsel nur jemals brauchen/verwenden Sie statische (nicht dynamische) Initialisierung.
C++0x/11 Tropfen der "POD" - Bezeichnung (fast) vollständig zu Gunsten der "trivialen" und "standard-layout". Standard-layout vorgesehen ist zum erfassen der ersten Absicht-etwas zu schaffen, was mit einem layout das gleiche wie du bekommen würde, im C. Triviale ist vorgesehen, um zu erfassen, wird die Unterstützung für statische Initialisierung.
Seit
new T
vs.new T()
befasst sich mit der Initialisierung, Sie wahrscheinlich wollenis_trivial
.Ich bin mir nicht sicher über die compiler-magic benötigt. Meine unmittelbare Reaktion wäre wahrscheinlich ja, aber zu wissen, einige der Dinge, die Menschen getan haben, mit TMP, ich habe eine harte Zeit wird sicher jemand konnte Sie nicht tun, diese zu...
Edit: für Beispiele, vielleicht ist es das beste, einfach zitieren Beispiele aus N3290:
Wie Sie zweifellos erraten,
POD
ist auch eine POD-struct.is_trivial
ist die richtige Antwort.trivial + standard layout = POD
immer halten?Für POD-Typen
new T()
ist-Wert-Initialisierung(wird mit dem Wert initialisiert, alle Mitglieder) ,undnew T
wird nicht initialisiert Mitglieder (default-Initialisierung). Für die Unterschiede zwischen den verschiedenen Formen der Initialisierung siehe diese Frage. Bottom line: Sie müssenis_pod
.