Ist der Referenztyp in C ++ ein POD-Typ?

7

Ist der Referenztyp in C ++ auch ein POD-Typ? Ist int& ein POD-Typ? und was ist mit

%Vor%

Kann mir jemand helfen?

    
Minh Tuấn 02.10.2013, 18:22
quelle

3 Antworten

9

Nein.

Die einzige Möglichkeit, ein Element festzulegen, das auf etwas verweist, ist ein benutzerdefinierter Konstruktor. Daher ist Ihre Struktur nicht-POD.

Aktualisierung:
Die Antwort ist immer noch nein.

Der C ++ 03-Standard gibt an, dass " Eine POD-Struktur eine Aggregatklasse ist, die keine nicht statischen Datenelemente vom Typ non-POD-struct, nicht-POD-union (oder Array solcher Typen) hat ) oder Referenz und ... "(C ++ 03 Standardsekt. 9 Abs. 5).

In C ++ 11 ist eine POD-Struktur " eine Klasse, die sowohl eine triviale Klasse als auch eine Standard-Layout-Klasse ist, und ... " und eine Standard-Layout-Klasse "< em> hat keine nicht statischen Datenelemente vom Typ Nicht-Standard-Layout-Klasse (oder Array von solchen Typen) oder Referenz "(C ++ 11-Standard-Abschnitt 9 Abs. 6-9).

>

Ich parse diejenigen Phrasen, die mit "oder referenzieren" enden, um sofort zu bedeuten, dass eine POD-Klasse keine nicht statischen Datenelemente enthalten darf, die von irgendeinem Referenztyp sind. Das Fehlen eines Kommas vor der "oder Referenz" macht andere Interpretationen möglich (z. B. ist es eine Referenz auf eine Nicht-POD-Klasse, die die Referenz schlecht macht, keine Referenz per se ), sondern Ich bleibe bei meiner Interpretation.

    
David Hammen 02.10.2013 18:29
quelle
6

Es gibt einen Standardweg (mit C ++ 11), um das zur Kompilierzeit zu bestimmen.

%Vor%

Demo: Ссылка

Die Ausgabe ist 1 0 0, also no eine Referenz auf int ist nicht POD.

    
stefan 02.10.2013 18:30
quelle
4

Ein POD-Typ ist ein beliebiger intrinsischer Typ oder ein Aggregat von intrinsischen Typen (im Prinzip alles, was keinen benutzerdefinierten Konstruktor, Destruktor, Kopierkonstruktor, Kopierzuweisungsoperator oder nicht-statische Zeiger-zu-Element-Typen hat) Details hier )

Da ein Element, das auf etwas verweist, über einen benutzerdefinierten Konstruktor festgelegt werden muss, würde es die erste Anforderung verletzen. Kurz gesagt, eine Struktur, die einen Referenztyp als Mitglied deklariert, ist kein POD-Typ.

    
Zac Howland 02.10.2013 18:30
quelle

Tags und Links