在头文件中初始化常量静态数组

use*_*084 38 c++ arrays initialization header-files

我刚刚发现以下内容无效.

//Header File
class test
{
    const static char array[] = { '1', '2', '3' };
};
Run Code Online (Sandbox Code Playgroud)

初始化这个的最佳位置在哪里?

Mik*_*our 48

最好的地方是源文件

// Header file
class test
{
    const static char array[];
};

// Source file
const char test::array[] = {'1','2','3'};
Run Code Online (Sandbox Code Playgroud)

您可以像尝试一样在类声明中初始化整数类型; 所有其他类型必须在类声明之外初始化,并且只能初始化一次.


JKD*_*JKD 32

您始终可以执行以下操作:

class test {
  static const char array(int index) {
    static const char a[] = {'1','2','3'};
    return a[index];
  } 
};
Run Code Online (Sandbox Code Playgroud)

关于这个范例的几件好事:

  • 你的链接"静态初始化惨败"已经死了. (4认同)
  • @sergiol修复了死链接(三年后) (2认同)

pet*_*hen 20

//Header File 
class test 
{ 
    const static char array[];
}; 

// .cpp
const char test::array[] = { '1', '2', '3' }; 
Run Code Online (Sandbox Code Playgroud)

  • 请在定义中没有静态. (8认同)
  • 因为他们没有尝试编译它.^ _-严重的是,`静态`的许多用途让很多人感到困惑. (3认同)
  • 人们为什么赞成显然无法编译的代码? (2认同)

lz9*_*z96 8

现在,在C++ 17中,您可以使用内联变量

内联变量如何工作?

一个简单的静态数据成员(N4424):

struct WithStaticDataMember {
  // This is a definition, no out­of­line definition is required.
  static inline constexpr const char *kFoo = "foo bar"?
}?
Run Code Online (Sandbox Code Playgroud)

在你的例子中:

//Header File
class test
{
    inline constexpr static char array[] = { '1', '2', '3' };
};
Run Code Online (Sandbox Code Playgroud)

应该工作

  • 我相信“static constexpr”已经意味着“内联”:/sf/ask/1007389071/#57407675 (2认同)