dichiarare un array di int const in C ++
-
06-09-2019 - |
Domanda
Ho una classe e voglio avere alcune maschere bit con valori 0,1,3,7,15, ...
Quindi, in sostanza voglio dichiarare un array di int di costante come:
class A{
const int masks[] = {0,1,3,5,7,....}
}
, ma il compilatore sempre lamentarsi.
ho provato:
static const int masks[] = {0,1...}
static const int masks[9]; // then initializing inside the constructor
Qualche idea su come questo può essere fatto?
Grazie!
Soluzione
class A {
static const int masks[];
};
const int A::masks[] = { 1, 2, 3, 4, ... };
Si consiglia di fissare la matrice all'interno della definizione di classe già, ma non è necessario. La matrice avrà un tipo completo nel punto di definizione (che è quello di mantenere all'interno del file cpp, non nell'intestazione) dove può dedurre la dimensione dal inizializzatore.
Altri suggerimenti
// 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};
- È possibile inizializzare variabili solo nel costruttore o altri metodi.
- variabili 'statiche' devono essere inizializzate fuori della definizione della classe.
Si può fare questo:
class A {
static const int masks[];
};
const int A::masks[] = { 1, 2, 3, 4, .... };
Bene, questo è perché non è possibile inizializzare un membro privato senza chiamare un metodo. Io uso sempre Liste di inizializzazione membro di farlo per i membri const e dati statici.
Se non si sa cosa Liste di inizializzazione membro sono, Sono solo ciò che si vuole.
Guardate questo codice:
class foo
{
int const b[2];
int a;
foo(): b{2,3}, a(5) //initializes Data Member
{
//Other Code
}
}
Anche GCC ha questa estensione cool:
const int a[] = { [0] = 1, [5] = 5 }; // initializes element 0 to 1, and element 5 to 5. Every other elements to 0.