0Pricing
C++ Academy · Lección

constexpr y tiempo de compilación

Calcule valores en tiempo de compilación

constexpr y tiempo de compilación es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 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.

Qué significa constexpr

constexpr indica al compilador que un valor o una función puede evaluarse en tiempo de compilación, produciendo una verdadera constante en tiempo de compilación.

#include <iostream>

int main() {
    constexpr int size = 4 * 4;   // computed at compile time
    int arr[size];
    std::cout << sizeof(arr) / sizeof(int) << "\n";
}

Funciones constexpr

Una función constexpr puede ejecutarse en tiempo de compilación cuando recibe argumentos constantes y, en caso contrario, en tiempo de ejecución.

#include <iostream>

constexpr int square(int x) { return x * x; }

int main() {
    constexpr int s = square(5);   // compile time
    int n = 6;
    std::cout << s << " " << square(n) << "\n";  // second at runtime
}

Constantes en tiempo de compilación para matrices

Como los valores constexpr se conocen en tiempo de compilación, pueden determinar el tamaño de las matrices y servir como argumentos de plantillas.

constexpr frente a const

const significa "no puede cambiar"; constexpr significa "se conoce en tiempo de compilación". Todo constexpr es implícitamente const, pero no todo const es constexpr.

#include <iostream>

int main() {
    int x;
    std::cin >> x;
    const int a = x;        // const but runtime value
    constexpr int b = 10;   // compile-time constant
    std::cout << b << "\n";
}

constexpr recursivo

Las funciones constexpr pueden ser recursivas, lo que permite que el compilador calcule valores como factoriales antes de que se ejecute el programa.

#include <iostream>

constexpr long factorial(int n) {
    return n <= 1 ? 1 : n * factorial(n - 1);
}

int main() {
    constexpr long f = factorial(5);  // 120 at compile time
    std::cout << f << "\n";
}

constexpr más completo en C++ moderno

Desde C++14, las funciones constexpr pueden contener bucles, variables locales y ramificaciones, lo que permite calcular constantes complejas en tiempo de compilación.

#include <iostream>

constexpr int sumTo(int n) {
    int total = 0;
    for (int i = 1; i <= n; ++i) total += i;
    return total;
}

int main() {
    constexpr int s = sumTo(100);
    std::cout << s << "\n";
}

Las variables constexpr deben inicializarse en tiempo de compilación

Una variable declarada como constexpr debe tener un inicializador que pueda evaluarse en tiempo de compilación; de lo contrario, el programa no se compilará.

Ventajas del cálculo en tiempo de compilación

Calcular en tiempo de compilación significa no tener ningún coste en tiempo de ejecución, poder usar los valores en contextos constantes y detectar antes los errores.

constexpr y las plantillas

Los valores constexpr se combinan de forma natural con las plantillas y con std::array, cuyos tamaños y parámetros deben ser constantes en tiempo de compilación.

Cuándo se ejecuta en tiempo de ejecución

Si una función constexpr recibe argumentos que no son constantes, simplemente se ejecuta en tiempo de ejecución como una función normal; no se produce ningún error.

Prefiera constexpr para las constantes

Use constexpr para las constantes verdaderas, como tamaños, cálculos matemáticos y tablas de búsqueda. Es más expresivo que const y permite ofrecer garantías en tiempo de compilación.

Comprobación rápida

Compruebe cuánto entiende de constexpr.

Repaso

Ha aprendido que constexpr permite evaluar variables y funciones en tiempo de compilación, que se diferencia de const (que solo prohíbe las modificaciones), que admite bucles y recursión en el C++ moderno y que se ejecuta en tiempo de ejecución cuando recibe entradas no constantes.

Preguntas frecuentes

¿La lección «constexpr y tiempo de compilación» es gratis?

Sí — el texto completo de «constexpr y tiempo de compilación» 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 «constexpr y tiempo de compilación»?

Calcule valores en 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 3 de 4.

¿Cuánto tiempo toma la lección «constexpr y tiempo de compilación»?

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

  1. Variables y parámetros const
  2. Funciones miembro const
  3. constexpr y tiempo de compilación
  4. consteval y constinit
← Volver a C++ Academy