C++11:POD数据类型
作者:互联网
啥是POD类型?
POD全称Plain Old Data。通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是一个POD类型。
平庸的定义
1.有平庸的构造函数
2.有平庸的拷贝构造函数
3.有平庸的移动构造函数
4.有平庸的拷贝赋值运算符
5.有平庸的移动赋值运算符
6.有平庸的析构函数
7.不能包括虚函数
8.不能包括虚基类
#include "stdafx.h"
#include <iostream>
using namespace std;
class A { A(){} };
class B { B(B&){} };
class C { C(C&&){} };
class D { D operator=(D&){} };
class E { E operator=(E&&){} };
class F { ~F(){} };
class G { virtual void foo() = 0; };
class H : G {};
class I {};
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << std::is_trivial<A>::value << std::endl; // 有不平庸的构造函数
std::cout << std::is_trivial<B>::value << std::endl; // 有不平庸的拷贝构造函数
std::cout << std::is_trivial<C>::value << std::endl; // 有不平庸的拷贝赋值运算符
std::cout << std::is_trivial<D>::value << std::endl; // 有不平庸的拷贝赋值运算符
std::cout << std::is_trivial<E>::value << std::endl; // 有不平庸的移动赋值运算符
std::cout << std::is_trivial<F>::value << std::endl; // 有不平庸的析构函数
std::cout << std::is_trivial<G>::value << std::endl; // 有虚函数
std::cout << std::is_trivial<H>::value << std::endl; // 有虚基类
std::cout << std::is_trivial<I>::value << std::endl; // 平庸的类
system("pause");
return 0;
}
执行结果
标准布局的定义
1.全部非静态成员有同样的訪问权限
2.继承树中最多仅仅能有一个类有非静态数据成员
3.子类的第一个非静态成员不能够是基类类型
4.没有虚函数
5.没有虚基类
6.全部非静态成员都符合标准布局类型
#include "stdafx.h"
#include <iostream>
using namespace std;
class A
{
private:
int a;
public:
int b;
};
class B1
{
static int x1;
};
class B2
{
int x2;
};
class B : B1, B2
{
int x;
};
class C1 {};
class C : C1
{
C1 c;
};
class D { virtual void foo() = 0; };
class E : D {};
class F { A x; };
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << std::is_standard_layout<A>::value << std::endl; // 违反定义1。
标签:11,平庸,int,数据类型,value,POD,include,class 来源: https://www.cnblogs.com/xfgnongmin/p/10669970.html