gpt4 book ai didi

c++ - 错误:必须使用常量表达式初始化constexpr变量 'struct2Var'

转载 作者:行者123 更新时间:2023-12-02 09:56:29 25 4
gpt4 key购买 nike

使用带有错误的Clang编译时,以下程序失败:constexpr变量'struct2Var'必须由常量表达式{var,2100433}初始化


如果我从“var”声明中删除__attribute__((weak)),则传递时没有任何问题。

有人可以解释这个错误背后的理论/原因吗?

struct myStruct
{
public:
constexpr operator const wchar_t*() const
{
return &m_cch;
}

const wchar_t m_cch;
};

extern __attribute__((weak)) const constexpr myStruct var {'a'};

struct myStruct2
{
const wchar_t* stzKey = nullptr;

int intvar = 0;
};

static constexpr const myStruct2 struct2Var[1]
{
{var, 2100433}
};

最佳答案

似乎使用__attribute__((weak))会用clang而不是gcc丢弃constexpr限定词。尽管clang试图取代gcc,但它可能会以不同的方式实现这种非标准功能。在那种情况下,我想说gcc和clang都不对。

同样,全局constexpr可能很难维护,因为它们在每个翻译单元中都应一致定义。为解决此问题,inline variable已添加到c++ 17。

关于c++ - 错误:必须使用常量表达式初始化constexpr变量 'struct2Var',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59629739/

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