c ++ 11中位字段的默认值

时间:2015-03-26 18:30:40

标签: c++11 bit-fields

这有效:

struct A {
  unsigned int x = 0;
};

这也有效:

struct A {
  unsigned int x : 1;
};

有可能将两者结合起来吗?即,同时初始化和指定大小?或者我是否需要显式编写构造函数来执行此操作?

1 个答案:

答案 0 :(得分:0)

让我们快速浏览一下[class.mem]的语法:

  

构件声明符
   declarator virt-specifier-seq opt pure-specifier opt
   declarator brace-or-equal-initializer opt
  标识符 opt attribute-specifier-seq opt constant-expression

位字段是第三个选项,具有初始化程序的成员是第二个选项。所以你不能兼得。

但是,可以初始化构造函数初始化列表中的命名位字段,就像任何其他非静态数据成员一样。 (但是你不能初始化未命名的位字段,因为它们不是成员。)