gpt4 book ai didi

c++ - 混合 constexpr 声明和 const 定义

转载 作者:IT老高 更新时间:2023-10-28 22:04:45 25 4
gpt4 key购买 nike

我遇到了以下情况:

struct Foo
{
static constexpr char s[] = "Hello world";
};

const char Foo::s[];

此代码段使用 Clang 3.7(使用 -std=c++11-std=c++14)编译,但 GCC(4.8、6.0、相同的语言设置)给出了我预期的错误:

GCC 4.8:

in.cpp:6:19: error: redeclaration ‘Foo::s’ differs in ‘constexpr’
const char Foo::s[];
^
in.cpp:3:27: error: from previous declaration ‘Foo::s’
static constexpr char s[] = "Hello world";
^
in.cpp:6:19: error: declaration of ‘constexpr const char Foo::s [12]’ outside of class is not definition [-fpermissive]
const char Foo::s[];

GCC 6.0:

‘constexpr’ needed for in-class initialization of static data member ‘const char Foo::s [12]’ of non-integral type [-fpermissive]

我找到了 this old question这似乎在讨论混合 constexprconst,但它关注的是初始化程序是否是常量表达式,而不是定义和声明在 const 方面是否可以不同。

是否允许将 constexpr T 静态数据成员定义为 const T

最佳答案

您的代码格式正确。 constexpr-说明符本身不是类型的一部分,而是添加了第二个声明中存在的 const ([dcl.constexpr]/9)。尽管根据 [dcl.constexpr]/1,一个函数(或函数模板)的不同声明必须在 constexpr-ness 中达成一致,但变量声明不存在这样的规则。

查看错误 #58541 ,它基本上使用你的例子。

关于c++ - 混合 constexpr 声明和 const 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053799/

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