非受限联合体 - 现代C++新特性总结

非受限联合体

非受限联合体:C++98中并不是所有数据类型都能够成为union的数据成员,不允许联合体拥有非POD(Plain Old Data)、静态或引用类型的成员。 C++11中取消了联合体对于数据成员的限制,任何非引用类型都可以成为联合体的数据成员,成为非受限联合体。

Example:

struct Student
{
	Student(bool g, int a): gender(g), age(a){}
	bool gender;
	int age;
};

union T
{
	Student s;	//C++98下编译失败,不是一个POD类型
	int id;
	char name[10];
};

int main()
{
	return 0;
}

//编译选项:g++ -std=c++98 union.cpp

本例中,由于Student自定义了一个构造函数,该类型是非POD的,在C++98标准中,union T无法通过编译,而在C++11中是可以的。

posted @ 2018-06-01 10:35  心媛意码  阅读(326)  评论(0编辑  收藏  举报