Возможно, лучше не выделять цвета, динамически выделяемые в первую очередь, поскольку это предотвратит возможность компилятора выполнять различные оптимизации. В идеале:
class Color
{
public:
static int const BLACK[3];
};
int const Color::BLACK[3] = {0,0,0};
Однако, если вы хотите их в куче, то это зависит от того, хотите ли вы указатель быть константным, значение константным или оба!
Если вы хотите указатель и значения быть константной, то вы, возможно, придется сделать это:
class Color
{
public:
static int const * const BLACK;
};
int const * const Color::BLACK = new int[3]{0,0,0};
Чтобы быть честным, я не уверен, что контекст будет требовать указателя и выделения. Это кажется ненужным.
EDIT: Для пре-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();
Зачем вам нужно их динамически распределять? И «устанавливая их значение», вы имеете в виду переопределить вновь выделенный массив или получить доступ к значениям массива? – crashmstr
Цвет :: BLACK [0] = 0; (и т. д.) в начале main() или где-то, что приложение инициализировано? А const, вы имеете в виду int * const или int const * const? – qeadz