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)
关于这个范例的几件好事:
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)
现在,在C++ 17中,您可以使用内联变量
一个简单的静态数据成员(N4424):
Run Code Online (Sandbox Code Playgroud)struct WithStaticDataMember { // This is a definition, no outofline definition is required. static inline constexpr const char *kFoo = "foo bar"? }?
在你的例子中:
//Header File
class test
{
inline constexpr static char array[] = { '1', '2', '3' };
};
Run Code Online (Sandbox Code Playgroud)
应该工作