类中的C ++静态变量

时间:2015-03-26 18:42:29

标签: c++

我想在C ++类中使用静态变量(如果可能,则为const)。我怎样才能设定价值?我想让它们动态分配。

这是我的班级:

class Color
{
public:
    static int* BLACK;
    static int* WHITE;
};

我已经做到了,这似乎工作正常:

int* Color::BLACK = new int[3];
int* Color::WHITE = new int[3];

但是之后如何设定价值呢?是否有可能使它们成为常量?

1 个答案:

答案 0 :(得分:1)

最好不要在第一时间动态分配颜色,因为它会阻止编译器进行各种优化。理想的情况是:

class Color
{
public:
  static int const BLACK[3];
};
int const Color::BLACK[3] = {0,0,0};

但是如果你确实想要它们在堆上,那么它取决于你是希望指针是const,值是const还是两者!

如果您希望指针和值为const,则可能必须执行此操作:

class Color
{
public:
  static int const * const BLACK;
};
int const * const Color::BLACK = new int[3]{0,0,0};

老实说,我不确定需要指针和分配的上下文。这似乎没必要。

编辑:对于C ++ 11之前的编译器,你可以这样做:

int * make_black()
{
  int * color = new int[3];
  color[0] = color[1] = color[2] = 0;
  return color;
}

class Color
{
public:
  static int const * const BLACK;
};
int const * const Color::BLACK = make_black();