位域元素的默认值

Vor*_*rac 6 c++ bit-fields c++11

在C++ 11中,人们可以做到

struct S {int i = 42;};
Run Code Online (Sandbox Code Playgroud)

每当忘记初始化成员i时,它会默认初始化为42.我只是尝试使用bitfields作为

struct S {int i = 42    : 5;};
Run Code Online (Sandbox Code Playgroud)

而且我正在

错误:预期';' 在':'标记之前

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

Ker*_* SB 6

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

成员声明
    声明符 virt-specifier-seqopt 纯说明符opt
    声明大括号或相等初始化器opt identifieropt 属性说明符-seq opt:常量表达式
    

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


Cha*_*net 5

位域初始化的语法是

 struct S {int i: 5 = 42;};
Run Code Online (Sandbox Code Playgroud)

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