c++ - headers - Inicializando la matriz estática constante en el archivo de encabezado
ejemplos de archivos de cabecera en lenguaje c++ (4)
Acabo de descubrir que lo siguiente no es válido.
//Header File
class test
{
const static char array[] = { ''1'', ''2'', ''3'' };
};
¿Dónde está el mejor lugar para inicializar esto?
Ahora, en C ++ 17, puedes usar la variable en línea
¿Cómo funcionan las variables en línea?
Un simple miembro de datos estáticos ( N4424 ):
struct WithStaticDataMember { // This is a definition, no outofline definition is required. static inline constexpr const char *kFoo = "foo bar"; };
En tu ejemplo:
//Header File
class test
{
inline constexpr static char array[] = { ''1'', ''2'', ''3'' };
};
debería funcionar
El mejor lugar sería en un archivo fuente.
// Header file
class test
{
const static char array[];
};
// Source file
const char test::array[] = {''1'',''2'',''3''};
Puede inicializar los tipos de enteros en la declaración de clase como intentó hacerlo; Todos los demás tipos deben inicializarse fuera de la declaración de clase, y solo una vez.
Siempre puedes hacer lo siguiente:
class test {
static const char array(int index) {
static const char a[] = {''1'',''2'',''3''};
return a[index];
}
};
Un par de cosas bonitas sobre este paradigma:
- No es necesario un archivo cpp
- Puedes hacer un control de rango si quieres
- Evitas tener que preocuparte por el fiasco de inicialización estática.
//Header File
class test
{
const static char array[];
};
// .cpp
const char test::array[] = { ''1'', ''2'', ''3'' };