C++ 使用值初始化静态数组

C++ 使用值初始化静态数组,c++,C++,我有一个完全静态的类。类中有一个指向可变长度整数列表的指针。类中的函数取决于在调用它们之前将列表中的第一个值初始化为2。有些函数也经常被调用,所以我不想在每个函数中首先设置那个值 以下是标题的示例: class Foo{ public: static void f1(); private: static int* list; } 和.cpp文件,全局(在其他函数调用之外): 我需要初始化列表[0 ]=2,但在与列表初始化器相同的位置不允许这样做。 < p>如果编译器支持C++ 2011

我有一个完全静态的类。类中有一个指向可变长度整数列表的指针。类中的函数取决于在调用它们之前将列表中的第一个值初始化为2。有些函数也经常被调用,所以我不想在每个函数中首先设置那个值

以下是标题的示例:

class Foo{
public:
  static void f1();
private:
  static int* list;
}
和.cpp文件,全局(在其他函数调用之外):


我需要初始化列表[0 ]=2,但在与列表初始化器相同的位置不允许这样做。

< p>如果编译器支持C++ 2011,则写< /p>
int* Foo::list = new int[10] { 2 };
另一种方法是定义私有静态函数。比如说

class Foo
{
// ...
private:
    static int *list;
    static int * init() 
    {
        int *p = new int[10];
        p[0] = 2;
        return p;
    }       
};

int* Foo::list = Foo::init();

“我有一个完全是静态的类。“为什么?”我需要以某种方式初始化列表[0]=2,但这在与列表初始值设定项相同的位置是不允许的。“因此?@LightnessRacesinOrbit-可能是一个具有大量常量的基类。例如形状颜色。@AndyG:。关键的是,初始化器不是“除了
Foo
”之外的任何人。我希望
静态
在现实生活中不在您的定义中,因为它是无效的。
class Foo
{
// ...
private:
    static int *list;
    static int * init() 
    {
        int *p = new int[10];
        p[0] = 2;
        return p;
    }       
};

int* Foo::list = Foo::init();