1
c++中将POD分为两个概念集(1,trival 平凡的) + (2,standard layout标准布局)
1,trival
1)trival constructor and destructor (do nothing...) trival copy constructor, trival move constructor, trival assignment operator, trival move operator;2)不能包含虚函数和虚基类。可以使用c++11 template<typename T> struct std::is_trival来对类型是否为trival进行判断。
以上函数使用编译器默认的实现的话就有trival属性,如果自己写的实现的话需要在后面添加=default来重新把它声明为trival.例如下面代码
struct Demo{int m; Demo(int x):m(x){} Demo()=default;} 用is_trival<Demo>::value返回1.
2,stand layout
1),所有非静态成员具有相同的访问权限(private...);2)类中第一个非静态成员的类型与基类不同
3)类有继承时:两个条件或操作为真则为真。
---)派生类中有非静态成员,且只有一个仅包含静态成员的基类
---)基类有非静态成员,而派生类没有非静态成员。
4)没有虚函数和虚基类
5)所有非静态数据成员均符合标准布局类型,基类也符合。
同样,stand layout可以使用is_standard_layout<T>::value进行判断。
网友评论