"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 > ¿Se puede inicializar un miembro estático de Constexpr utilizando una función Constexpr en C++?

¿Se puede inicializar un miembro estático de Constexpr utilizando una función Constexpr en C++?

Publicado el 2024-12-22
Navegar:401

Can a Static Constexpr Member Be Initialized Using a Constexpr Function in C  ?

Constexpr inicializando miembro estático usando función estática

Pregunta original:

En C, ¿Es posible calcular un valor constexpr (constante de tiempo de compilación) a partir de una función constexpr y almacenarlo como un miembro estático de un clase?

Primeros intentos y respuesta de los compiladores:

El primer intento de definir una función constexpr estática foo dentro de la clase e inicializar una barra de miembros constexpr estática usando foo falló con errores tanto en g -4.5.3 como en g -4.6.3.

Explicación:

Según el estándar C, un miembro de datos constexpr estático se puede inicializar en la definición de clase usando una llave o igual -inicializador, donde cada cláusula inicializadora debe ser una expresión constante. El código proporcionado violó esta regla, ya que la inicialización de la barra se basó en la expresión constante foo(sizeof(int)) dentro del cuerpo de la clase, por lo que no es una expresión constante.

Análisis adicional:

Intentos posteriores, incluido mover la definición de la función constexpr fuera del cuerpo de la clase, aún dieron como resultado errores en g -4.6.3, resaltando los específicos del compilador limitaciones.

Conclusión:

De acuerdo con el estándar C, no se permite inicializar un miembro de datos estático de constexpr con un inicializador que implique una llamada a función constexpr fuera de la definición de un Función constexpr o constructor constexpr. Esto se debe al requisito de que las variables constexpr deben estar disponibles como constantes en tiempo de compilación dentro de los cuerpos de las funciones miembro.

Ú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