位域元素的默认值

时间:2014-11-21 09:24:40

标签: c++ c++11 bit-fields

在C ++ 11中可以做到

struct S {int i = 42;};

每当忘记初始化成员i时,它就会发生 获取默认值初始化为42.我刚试过这个 位域为

struct S {int i = 42    : 5;};

我正在

  

错误:预期';'之前':'令牌

对于位域成员是否存在此功能,如果存在,我该如何使用它?

3 个答案:

答案 0 :(得分:4)

不,位字段不允许初始化程序作为成员声明的一部分。您可以在描述类成员的语法部分(C ++ 11及更高版本,[class.mem])中看到这一点:

  

构件声明符:
  声明符virt-specifier-seqopt pure-specifier opt
   declarator brace-or-equal-initializer opt
   identifyieropt attribute-specifier-seq opt :constant-expression

第三种形式是位字段声明的语法,但只有第二种形式列出了大括号或等于初始化

答案 1 :(得分:4)

位域初始化的语法为

 
 struct S {int i: 5 = 42;};

,并且仅在c ++ 20:-std=c++2a中可用

答案 2 :(得分:3)

您还可以使用构造函数初始化这样的位域:

struct Foo {
    Foo () : i {15} {}

    int i : 5;
};

Foo foo;
cout << foo.i << endl; // 15

你可以看到它here