混合常数声明和Const定义?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (7)

遇到了以下情况:

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

const char Foo::s[];

此代码片段使用Clang3.7编译

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]
提问于
用户回答回答于

constexpr-specifier本身不是类型的一部分,但增加了const([dcl.constexpr] / 9),其存在于第二个声明。尽管一个函数(或函数模板)的不同声明必须constexpr

扫码关注云+社区