C++ guarantee and name for POD-like data, memcpy capable

后端 未结 4 722
小鲜肉
小鲜肉 2020-12-17 10:59

In another question I incorrectly used the term POD to refer to data types that aren\'t actually POD types (on account of having a constructor). Now, I\'ve looked through th

4条回答
  •  温柔的废话
    2020-12-17 11:25

    In C++0x, the concept of PODness is broken out into several individually useful categories:

    A trivially copyable class is a class that (draft 3242, section [class]):

    • has no non-trivial copy constructors (12.8),
    • has no non-trivial move constructors (12.8),
    • has no non-trivial copy assignment operators (13.5.3, 12.8),
    • has no non-trivial move assignment operators (13.5.3, 12.8), and
    • has a trivial destructor (12.4).

    A trivial class is a class that has a trivial default constructor (12.1) and is trivially copyable.

    [ Note: In particular, a trivially copyable or trivial class does not have virtual functions or virtual base classes. — end note ]

    A standard-layout class is a class that:

    • has no non-static data members of type non-standard-layout class (or array of such types) or reference,
    • has no virtual functions (10.3) and no virtual base classes (10.1),
    • has the same access control (Clause 11) for all non-static data members,
    • has no non-standard-layout base classes,
    • either has no non-static data members in the most derived class and at most one base class with non-static data members, or has no base classes with non-static data members, and
    • has no base classes of the same type as the first non-static data member.

    The requirements for trivial constructors, assignment operators, and destructor are scattered throughout section 12 "Special Member Functions" [special].

提交回复
热议问题