"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo inicializar matrices de miembros con listas de inicializadores en C++ 0x?

¿Cómo inicializar matrices de miembros con listas de inicializadores en C++ 0x?

Publicado el 2024-11-08
Navegar:510

How to Initialize Member Arrays with Initializer Lists in C  0x?

Inicialización de matrices de miembros con listas de inicializadores

En C 0x, puede encontrar el error "tipos incompatibles en la asignación" al intentar inicializar una matriz de miembros con una lista de inicializadores .

Para resolver esto, considere usar un constructor de plantilla variado en su lugar:

struct foo {
    int x[2];
    template 
    foo(T... ts) : x{ts...} {}
};

int main() {
    // Usage
    foo f1(1, 2);   // OK
    foo f2{1, 2};   // Also OK
    foo f3(42);    // OK; x[1] zero-initialized
    foo f4(1, 2, 3); // Error: too many initializers
    foo f5(3.14);  // Error: narrowing conversion not allowed
    foo f6("foo"); // Error: no conversion from const char* to int
}

Si preservar el estado 'const' no es esencial, también puede emplear una función para cargar los valores de la matriz:

struct foo {
    int x[2];
    foo(std::initializer_list il) {
        std::copy(il.begin(), il.end(), x);
    }
};

Sin embargo, este enfoque renuncia a la verificación de límites en tiempo de compilación.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3