Range-based for, nullptr y enum class
Use las comodidades de C++11: for basado en rangos, nullptr y enumeraciones con tipos fuertes.
Range-based for, nullptr y enum class es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 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.
Tres mejoras rápidas de C++11
C++11 incorporó muchas mejoras pequeñas. Tres que usará a diario son range-based for, nullptr y enum class.
Repaso del for basado en rangos
Permite recorrer cualquier contenedor que tenga begin() y end() sin hacer cálculos de índices.
for (const auto& x : v) {
process(x);
}Qué reemplaza
El bucle verboso basado en iteradores se convierte en una sola línea.
// Before C++11
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
process(*it);
}nullptr supera a NULL
nullptr es un literal de puntero nulo con tipo. Evita la ambigüedad en la resolución de sobrecargas que provoca NULL (una macro para 0).
void f(int);
void f(int*);
f(NULL); // calls f(int)
f(nullptr); // calls f(int*)Por qué gana nullptr
Use nullptr de forma coherente:
- Tipo distinto (
std::nullptr_t) - Intención más clara
- Funciona en metaprogramación con plantillas
- No se puede convertir accidentalmente a
int
enum simple: una trampa
Los enums del estilo antiguo exponen sus nombres en el ámbito que los contiene y se convierten implícitamente a int.
enum Color { RED, GREEN, BLUE };
int c = RED; // implicit conversion, no warning
// RED, GREEN, BLUE leak into global scopeenum class: con ámbito y tipado
El enum class de C++11 requiere cualificación y prohíbe la conversión implícita a int.
enum class Color { Red, Green, Blue };
Color c = Color::Red;
// int n = Color::Red; // ERROR
std::cout << static_cast<int>(c); // explicit conversionEspecificar el tipo subyacente
Puede fijar el tamaño de almacenamiento de un enum class a un tipo entero específico.
enum class Status : uint8_t { OK = 0, FAIL = 1, RETRY = 2 };Declarar enum class por adelantado
Como el tipo subyacente se conoce, los enum class se pueden declarar por adelantado, lo que resulta útil para evitar inclusiones innecesarias entre archivos de cabecera.
// header A
enum class Color : int;
// header B (full definition)
enum class Color : int { Red, Green, Blue };Cuándo está bien usar enum simple
Los enums simples todavía tienen usos: máscaras de bits para flags enteros cuando realmente desea una conversión implícita. Documente explícitamente esta decisión de diseño.
Consejo para la migración
Al modernizar una base de código, convierta gradualmente los enums simples a enum class. Busque los lugares que dependan de la conversión implícita a int y añada static_cast.
Comprobación rápida
¿Qué hace que enum class sea más seguro que un enum simple?
Repaso
Tres mejoras rápidas de C++11: el for basado en rangos elimina el código repetitivo de los iteradores, nullptr reemplaza a NULL y enum class proporciona enums con ámbito y seguridad de tipos. Use las tres opciones de forma predeterminada.
Preguntas frecuentes
¿La lección «Range-based for, nullptr y enum class» es gratis?
Sí — el texto completo de «Range-based for, nullptr y enum class» 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 «Range-based for, nullptr y enum class»?
Use las comodidades de C++11: for basado en rangos, nullptr y enumeraciones con tipos fuertes. 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 2 de 4.
¿Cuánto tiempo toma la lección «Range-based for, nullptr y enum class»?
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
- auto, decltype y deducción de tipos
- Range-based for, nullptr y enum class
- Expresiones lambda: captura, mutable y genéricas
- Asignaciones estructuradas e if-init en C++17