объявить массив целых чисел const в C ++
-
06-09-2019 - |
Вопрос
У меня есть класс, и я хочу иметь несколько битовых масок со значениями 0,1,3,7,15,...
Итак, по сути, я хочу объявить массив постоянных значений int, таких как:
class A{
const int masks[] = {0,1,3,5,7,....}
}
но компилятор всегда будет жаловаться.
Я пытался:
static const int masks[] = {0,1...}
static const int masks[9]; // then initializing inside the constructor
Есть какие-нибудь идеи о том, как это можно сделать?
Спасибо!
Решение
class A {
static const int masks[];
};
const int A::masks[] = { 1, 2, 3, 4, ... };
Возможно, вы уже захотите зафиксировать массив в определении класса, но вам не обязательно это делать.Массив будет иметь полный тип в точке определения (который должен храниться в файле .cpp, а не в заголовке), где он может определить размер из инициализатора.
Другие советы
// in the .h file
class A {
static int const masks[];
};
// in the .cpp file
int const A::masks[] = {0,1,3,5,7};
enum Masks {A=0,B=1,c=3,d=5,e=7};
- вы можете инициализировать переменные только в конструкторе или другими методами.
- "статические" переменные должны быть инициализированы из определения класса.
Ты можешь это сделать:
class A {
static const int masks[];
};
const int A::masks[] = { 1, 2, 3, 4, .... };
Ну, это потому, что вы не можете инициализировать закрытый элемент без вызова метода.Я всегда использую Списки инициализации участников чтобы сделать это для элементов const и static data.
Если ты не знаешь, что Списки Инициализаторов участников есть, Это именно то, что вы хотите.
Посмотрите на этот код:
class foo
{
int const b[2];
int a;
foo(): b{2,3}, a(5) //initializes Data Member
{
//Other Code
}
}
Также у GCC есть это классное расширение:
const int a[] = { [0] = 1, [5] = 5 }; // initializes element 0 to 1, and element 5 to 5. Every other elements to 0.