我想在C ++类中使用静态变量(如果可能,则为const)。我怎样才能设定价值?我想让它们动态分配。
这是我的班级:
class Color
{
public:
static int* BLACK;
static int* WHITE;
};
我已经做到了,这似乎工作正常:
int* Color::BLACK = new int[3];
int* Color::WHITE = new int[3];
但是之后如何设定价值呢?是否有可能使它们成为常量?
答案 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();