Expand|Select|Wrap|Line Numbers
- class Test1{
- public:
- Test1()=default;
- Test1(char in1,char in2):char1(in1),char2(in2){}
- char char1;
- char char2;
- };
- class Test2{
- public:
- Test2()=default;
- Test2(char in1,char in2):char1(in1),char2(in2){}
- private:
- char char1;
- char char2;
- };
Expand|Select|Wrap|Line Numbers
- Test1 obj1={'a','b'};//valid in c++0x
- Test2 obj2={'a','b'};//valid in c++0x
Expand|Select|Wrap|Line Numbers
- class Test{
- public:
- Test()=default;
- Test(char in1,char in2):char1(in1),char2(in2){}
- char char1;
- private:
- char char2;
- };
- Test obj={'a','b'};//invalid in c++0x
A class/struct is considered a POD if it is trivial, standard-layout, and if all of its non-static members are PODs.
A trivial class or struct is defined as one that:
1. Has a trivial default constructor. This may use the default constructor syntax (SomeConstructor() = default;).
2. Has a trivial copy constructor, which may use the default syntax.
3. Has a trivial copy assignment operator, which may use the default syntax.
4. Has a trivial destructor, which must not be virtual.
A standard-layout class or struct is defined as one that:
1. Has only non-static data members that are of standard-layout type
2. Has the same access control (public, private, protected) for all non-static members
3. Has no virtual functions
4. Has no virtual base classes
5. Has only base classes that are of standard-layout type
6. Has no base classes of the same type as the first defined non-static member
7. Either has no base classes with non-static members, or has no non-static data members in the most derived class and at most one base class with non-static members. In essence, there may be only one class in this class's hierarchy that has non-static members.
In case you don't know what a trivial constructor or operator is:
Compiler generates a trivial one of each of following items for a class, in case it isn't user-declared: Copy constructor, destructor and copy assignment operator.
And also if there's no user-declared constructor for a class, a trivial default constructor is generated for that class, in case there are any user-declared constructors you can use the syntax(SomeConstructor() = default;) to make your own trivial default constructor.