在C++中初始化静态成员(数组)

vtd*_*hor 28 c++

我打算创建一个只有静态成员和静态函数的类.其中一个成员变量是一个数组.是否可以在不使用构造函数的情况下初始化它?我现在有很多链接错误......

class A
{
public:
  static char a[128];
  static void do_something();
};
Run Code Online (Sandbox Code Playgroud)

你会如何初始化[128]?为什么我不能像在C中那样直接指定它的值来初始化[128]?

a[128] = {1,2,3,...};
Run Code Online (Sandbox Code Playgroud)

Bri*_*ndy 37

您可以在.cpp文件中执行此操作:

char A::a[6] = {1,2,3,4,5,6};
Run Code Online (Sandbox Code Playgroud)

  • 是的。在您的 .cpp 文件中:`char A::a[6] = {1,2,3,4,5,6}` (2认同)

小智 11

如果您的成员在初始化后不会更改,C++11 允许您将其全部保留在类定义中constexpr

class A
{
public:
  static constexpr const char a[] = {1,2,3}; // = "Hello, World"; would also work
  static void do_something();
};
Run Code Online (Sandbox Code Playgroud)


jas*_*ine 9

只是想知道,为什么需要在构造函数中初始化它?

通常,您将数据成员设置为静态,因此您无需创建实例即可访问该成员.只有在创建实例时才会调用构造函数.

非const静态成员在类声明之外(在实现文件中)初始化,如下所示:


class Member
{
public:
    Member( int i ) { }
};

class MyClass
{
public:
    static int i;
    static char c[ 10 ];
    static char d[ 10 ];
    static Member m_;
};


int MyClass::i = 5;
char MyClass::c[] = "abcde";
char MyClass::d[] = { 'a', 'b', 'c', 'd', 'e', '\0' };
Member MyClass::m_( 5 );
Run Code Online (Sandbox Code Playgroud)

  • 是否可以在类中的声明中保留数组的大小未定义,并让它自动调整大小?例如:`static char c [];`而不是`static char c [10];`? (2认同)