13

我是 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.
4

3 回答 3

14

“变体成员”在 C++11 的 9.5/8 中定义:

类联合类是具有匿名联合作为直接成员的联合或类。类似联合的类 X 具有一组变体成员。如果 X 是联合,则其变体成员是非静态数据成员;否则,它的变体成员是作为 X 成员的所有匿名联合的非静态数据成员。

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

您引用的上下文是 12.1/5,表示如果类似联合的类有一个带有非平凡默认构造函数的变体成员,则该类本身的默认构造函数将被删除。问题是类的默认构造函数应该构造哪个变体成员,解决方法是不要有默认构造函数。如果所有变体成员都有微不足道的默认构造函数,那没有问题,因为不做任何事情,类的默认构造函数就是构造所有/非构造函数。

boost::variant是一个单独的东西。如果“某些站点”说“变体成员”,而它们的意思是“给定可以持有的可能类型”,我不会太惊讶boost::variant,也就是说,“成员” variant。但这不是 C++11 标准中新定义的含义。

于 2012-07-17T15:51:29.700 回答
7

术语变体通常用于标识可以保存一组不同类型的值的成员。与语言中的a 类似union,该术语variant通常保留用于允许以类型安全的方式存储不同选项的类型。

对于一个这样的示例,您可能需要阅读 boost 变体库的文档,如果这不能澄清概念,请发表评论/提出疑问。

提升变体

于 2012-07-17T15:44:02.197 回答
2

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

于 2012-07-17T15:44:23.980 回答