consteval y constinit
Palabras clave modernas de tiempo de compilación
consteval y constinit es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
Más allá de constexpr
C++20 añade dos palabras clave que hacen más preciso el uso de la programación en tiempo de compilación: consteval para funciones que deben evaluarse en tiempo de compilación y constinit para garantizar la inicialización en tiempo de compilación.
consteval: funciones inmediatas
Una función consteval debe evaluarse en tiempo de compilación. A diferencia de constexpr, nunca puede ejecutarse en tiempo de ejecución.
consteval int cube(int x) {
return x * x * x;
}
int main() {
constexpr int c = cube(3); // OK: compile time
return c;
}consteval rechaza las llamadas en tiempo de ejecución
Llamar a una función consteval con un valor conocido solo en tiempo de ejecución provoca un error de compilación; la garantía se hace cumplir.
consteval int cube(int x) { return x * x * x; }
int main() {
int n = 4;
// int bad = cube(n); // ERROR: n is not a constant
return cube(2);
}¿Por qué consteval?
Úselo cuando un cálculo no tenga sentido en tiempo de ejecución; por ejemplo, para generar una tabla constante o validar un literal en tiempo de compilación.
constexpr frente a consteval
Las funciones constexpr pueden ejecutarse en tiempo de compilación; las funciones consteval lo hacen siempre. Elija consteval para impedir su uso accidental en tiempo de ejecución.
constinit: inicialización estática garantizada
constinit garantiza que una variable estática o local de un hilo se inicialice en tiempo de compilación, eliminando el fiasco del orden de inicialización estática.
constinit int globalCount = 10; // initialized at compile time
int main() {
return globalCount;
}constinit no es const
A diferencia de constexpr, una variable constinit todavía puede modificarse después de su inicialización en tiempo de compilación; solo restringe la forma en que se inicializa.
constinit int counter = 0;
int main() {
counter = 5; // OK: constinit allows mutation
return counter;
}Resolver el problema del orden de inicialización
Para las variables estáticas no locales distribuidas entre unidades de traducción, constinit obliga a realizar una inicialización estática (en tiempo de compilación), de modo que el valor está preparado antes de que se ejecute cualquier inicialización dinámica.
Comparación de las tres palabras clave
constexpr: puede evaluarse en tiempo de compilación y es const. consteval: debe evaluarse en tiempo de compilación (funciones). constinit: obliga a inicializar en tiempo de compilación y mantiene la mutabilidad.
Compatibilidad del compilador
Estas son características de C++20. Compile con -std=c++20 (o posterior) en GCC/Clang, o con /std:c++20 en MSVC.
Elegir la herramienta adecuada
Use consteval para forzar los cálculos en tiempo de compilación y constinit para hacer determinista la inicialización estática; juntas hacen más seguro el uso de C++ en tiempo de compilación.
Comprobación rápida
Compruebe cuánto entiende de consteval y constinit.
Repaso
Ha aprendido las palabras clave de C++20 consteval (funciones que deben ejecutarse en tiempo de compilación) y constinit (inicialización en tiempo de compilación garantizada para variables estáticas que siguen siendo mutables). Junto con constexpr, proporcionan un control preciso sobre la evaluación en tiempo de compilación.
Preguntas frecuentes
¿La lección «consteval y constinit» es gratis?
Sí — el texto completo de «consteval y constinit» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «consteval y constinit»?
Palabras clave modernas de tiempo de compilación Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «consteval y constinit»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Variables y parámetros const
- Funciones miembro const
- constexpr y tiempo de compilación
- consteval y constinit