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

时间:2010-04-03 04:35:59

标签: c++

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

class A
{
public:
  static char a[128];
  static void do_something();
};

你如何初始化[128]?为什么我不能通过直接指定其值来初始化[128],就像在C?

中那样
a[128] = {1,2,3,...};

5 个答案:

答案 0 :(得分:34)

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

char A::a[6] = {1,2,3,4,5,6};

答案 1 :(得分: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 );

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

好吧,我已经找到了一种不同的初始化方法,而不需要在已经意大利面条C ++中创建额外的项目

char fred::c[4] = {};

答案 4 :(得分:0)

使用C+++17及以上,可以内联初始化,如下

class A
{
public:
  inline static char a[2]={1,1};
  static void do_something();
};