2012-07-17 38 views
8

我是C++新手。我经常从一些网站上阅读变体成员?C++中的变体成员是什么?

class School 
{ 
    int x; -> data member. 
} 

我知道数据成员。但变体成员是什么?

注意: 从C++规范:在构造器页面下。

X is a union-like class that has a variant member with a non-trivial default constructor. 
+6

你能发布一个链接到这些网站吗? – Praetorian 2012-07-17 15:38:32

+0

堆栈溢出本身就是其中之一。 – BlackVegetable 2012-07-17 15:40:11

+0

你是在说'boost :: variant'还是其他的东西?传统上,变体是包含所有支持类型的联合。 – chris 2012-07-17 15:43:12

回答

11

“变体构件”在C++ 11 9.5/8定义:

甲工会状类是联合或具有匿名联合 作为直接成员的类。类工会类X具有一组变体成员。 如果X是联合,它的变体成员是非静态数据成员; 否则,它的变种成员都是 匿名联合是十

的成员。换句话说,所有工会的非静态数据成员是“变种成员”的非静态数据成员,对于包含任何匿名联合的类,其非静态数据成员是该类的“变体成员”。

你引用的上下文是12.1/5,说如果类似联合的类有一个具有非平凡默认构造函数的变体成员,那么该类本身的默认构造函数将被删除。问题是其中变体成员应该由该类的默认构造函数构造,并且该解决方案不具有默认构造函数。如果所有变体成员都有简单的默认构造函数,则没有问题,因为无所事事,该类的默认构造方法是均等地构造所有/不是它们。

boost::variant是一件单独的事情。如果“某些站点”在他们的意思是“给定的boost::variant可以容纳的可能类型”,也就是说variant的“成员”时,我不会感到惊讶。但这不是C++ 11标准中新定义的含义。

+0

Steve,谢谢你的回复。试图从您的评论中获得更多的清晰度。所以要说union {int x; int y},在这里,x,y都是变体成员。我对么? – Whoami 2012-07-17 16:36:24

+0

@Whoami:没错。 – 2012-07-18 08:03:36

7

术语变体通常使用,以确定可容纳一组不同类型的的值的构件。与该语言中的union类似,术语variant通常保留为允许以类型安全的方式存储不同选项的类型。

您可能需要阅读boost变体库的文档以查看其中的一个示例,如果这样做不能清除该概念,请删除评论/用疑问创建一个问题。

Boost Variant

2

变体是含有联合成员和一个无符号整数构件描述当前正在使用了将联的构件的结构。如果你不知道什么是工会,请先阅读它,然后再回来。

相关问题