2015-04-28 9 views
26

To jest około std::is_pod, które wykrywa, czy szablon jest zwykłym starym typem danych , czy też nie.Dlaczego to nie jest POD?

Zobacz następujący kod:

struct A { 
public: 
    int m1; 
    int m2; 
}; 

struct B { 
public: 
    int m1; 
private: 
    int m2; 
}; 

struct C { 
private: 
    int m1; 
    int m2; 
}; 

int main() 
{ 
    std::cout << std::boolalpha; 
    std::cout << std::is_pod<A>::value << '\n'; // true 
    std::cout << std::is_pod<B>::value << '\n'; // false 
    std::cout << std::is_pod<C>::value << '\n'; // true 
} 

W 3 elemencie wszystko wyglądać POD mnie. Ale widocznie struct B nie jest. Nie rozumiem, dlaczego. Dla mnie wszyscy mają trywialnego konstruktora, przenoszą i kopiują operatora. Destruktor jest z pewnością trywialny.

Obwiniam to za pomocą 2 specyfikatorów dostępu, ale nie mogę znaleźć informacji na ten temat.

+0

http://pl.cppreference.com/w/cpp/types/is_pod – juanchopanza

+2

Dla tych z nas, którzy mają ochotę kliknąć link @ juanchopanza, POD = zwykły stary typ danych –

Odpowiedz

31

się zgodnie z normą (9 Klasy [klasa], kopalnia nacisk)

Klasa standardowego układu to klasa:

...

- ma tę samą kontrolę dostępu (Rozdział 11) dla wszystkich n Użytkownicy on-statyczne dane,

...

i

POD struct jest non-union klasa, która jest zarówno trywialne klasa i standard -layout klasa, i ...

Twoje przeczucie jest prawidłowe, ponieważ B.m1 i B.m2 są niestatyczne i mają różną kontrolę dostępu.

Powiązane problemy