【问题标题】:Default values to bitfield elements位域元素的默认值
【发布时间】:2014-11-21 09:24:40
【问题描述】:

在 C++11 中可以做到

struct S {int i = 42;};

如果忘记初始化成员 i 它 将默认初始化为 42。我刚刚尝试过 位域为

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

并且正在得到

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

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

【问题讨论】:

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


【解决方案1】:

位域初始化的语法是

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

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

【讨论】:

【解决方案2】:

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

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

第三种形式是位域声明的语法,但只有第二种形式列出了brace-or-equal-initializer

【讨论】:

  • @Vorac:是的。除非你想写一个提案来允许位域的初始化器。
【解决方案3】:

您也可以使用构造函数来初始化位域,如下所示:

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

    int i : 5;
};

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

你可以看到here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    相关资源
    最近更新 更多