gpt4 book ai didi

c++11 - 初始化 constexpr 静态类成员时出现编译器错误

转载 作者:行者123 更新时间:2023-12-04 10:38:16 24 4
gpt4 key购买 nike

我已经通过以下方式声明了一个类

class A
{
struct B
{
constexpr
B(uint8_t _a, uint8_t _b) :
a(_a),
b(_b)
{}

bool operator==(const B& rhs) const
{
if((a == rhs.a)&&
(b == rhs.b))
{
return true;
}
return false;
}

uint8_t a;
uint8_t b;
};

constexpr static B b {B(0x00, 0x00)};

};

但是 g++ 说

error: field initializer is not constant



无法弄清楚我错在哪里。

最佳答案

Clang 更有帮助:

27 : error: constexpr variable 'b' must be initialized by a constant expression
constexpr static B b {B(0x00, 0x00)};
^~~~~~~~~~~~~~~~
27 : note: undefined constructor 'B' cannot be used in a constant expression
constexpr static B b {B(0x00, 0x00)};
^
8 : note: declared here
B(uint8_t _a, uint8_t _b) :
^

在成员变量的大括号或等号初始化器中,构造函数(包括嵌套类的构造函数)被认为是未定义的;这是因为构造函数引用成员变量的值是合法的,因此必须首先定义成员变量,即使它们在文件中的词法后面:
struct A {
struct B { int i; constexpr B(): i{j} {} };
constexpr static int j = 99;
};

解决方法是放置 B外面 A ,或者可能在基类中。

关于c++11 - 初始化 constexpr 静态类成员时出现编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24527395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com