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.
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