在C ++ 11中可以做到
struct S {int i = 42;};
每当忘记初始化成员i时,它就会发生 获取默认值初始化为42.我刚试过这个 位域为
struct S {int i = 42 : 5;};
我正在
错误:预期';'之前':'令牌
对于位域成员是否存在此功能,如果存在,我该如何使用它?
答案 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