Plain Old Data类型

2015-06-30  本文已影响0人  yangxingpping

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进行判断。


上一篇 下一篇

猜你喜欢

热点阅读