我是 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.
“变体成员”在 C++11 的 9.5/8 中定义:
类联合类是具有匿名联合作为直接成员的联合或类。类似联合的类 X 具有一组变体成员。如果 X 是联合,则其变体成员是非静态数据成员;否则,它的变体成员是作为 X 成员的所有匿名联合的非静态数据成员。
换句话说,联合的所有非静态数据成员都是“变体成员”,对于包含任何匿名联合的类,它们的非静态数据成员都是该类的“变体成员”。
您引用的上下文是 12.1/5,表示如果类似联合的类有一个带有非平凡默认构造函数的变体成员,则该类本身的默认构造函数将被删除。问题是类的默认构造函数应该构造哪个变体成员,解决方法是不要有默认构造函数。如果所有变体成员都有微不足道的默认构造函数,那没有问题,因为不做任何事情,类的默认构造函数就是构造所有/非构造函数。
boost::variant
是一个单独的东西。如果“某些站点”说“变体成员”,而它们的意思是“给定可以持有的可能类型”,我不会太惊讶boost::variant
,也就是说,“成员” variant
。但这不是 C++11 标准中新定义的含义。
术语变体通常用于标识可以保存一组不同类型的值的成员。与语言中的a 类似union
,该术语variant
通常保留用于允许以类型安全的方式存储不同选项的类型。
对于一个这样的示例,您可能需要阅读 boost 变体库的文档,如果这不能澄清概念,请发表评论/提出疑问。
变体是包含联合成员和无符号整数成员的结构,用于描述当前正在使用联合成员的哪个成员。如果您不知道工会是什么,请先阅读它,然后再回来。