首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有位字段的结构的Constexpr构造函数

具有位字段的结构的Constexpr构造函数
EN

Stack Overflow用户
提问于 2019-12-30 15:14:39
回答 1查看 457关注 0票数 0
代码语言:javascript
复制
struct data {
    uint8_t nibble1 : 4,
        nibble2 : 4;
    constexpr data() {
        nibble1 = 2;
        nibble2 = 4;
    }
};

这就给出了GCC 9.2.0的两个编译错误:

代码语言:javascript
复制
error: member 'data::nibble1' must be initialized by mem-initializer in 'constexpr' constructor
error: member 'data::nibble2' must be initialized by mem-initializer in 'constexpr' constructor

但我敢肯定我的构造师把他们两个都搞砸了。我看了一下https://en.cppreference.com/w/cpp/language/constexpr,没有看到任何我的constexpr构造函数不满足的要求。

我怎样才能消除这个错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-30 15:18:16

您需要使用成员初始化列表初始化成员。

代码语言:javascript
复制
constexpr data() : nibble1(2), nibble2(4) { }

链接的页面显示了对constexpr构造函数的下列要求:

  • 对于类或结构的构造函数,必须初始化每个基类子对象和每个非静态数据成员。

但这一点:

代码语言:javascript
复制
nibble1 = 2;

...is不是nibble1的初始化,而是赋值。初始化成员变量的唯一方法是使用成员初始化程序列表或默认它们(我认为,在C++20之前,这对于位字段是不可能的)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59532991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档