Acceso a valores de optional
Use value_or y has_value
Acceso a valores de optional 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.
Operador de desreferenciación
La forma más rápida de leer un optional es *opt, pero solo cuando esté seguro de que contiene un valor; no se realiza ninguna comprobación.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 10;
if (o) std::cout << *o << "\n";
}El método value()
opt.value() devuelve el valor, pero lanza std::bad_optional_access si el optional está vacío. Úselo cuando un optional vacío represente un error real.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o;
try { std::cout << o.value() << "\n"; }
catch (const std::bad_optional_access&) { std::cout << "empty!\n"; }
}value_or para valores predeterminados
opt.value_or(fallback) devuelve el valor contenido si existe; de lo contrario, devuelve el valor alternativo. No requiere ramificaciones ni excepciones.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = std::nullopt;
std::cout << o.value_or(-1) << "\n"; // -1
}value_or con datos reales
Un uso habitual es proporcionar un valor predeterminado cuando falta una configuración o no se encuentra un resultado en una búsqueda.
#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> lookup(bool found) {
if (found) return std::string("Pro");
return std::nullopt;
}
int main() {
std::cout << lookup(false).value_or("Free") << "\n";
}Operador flecha
En optionals de tipos de clase, opt->member permite acceder directamente a los miembros, suponiendo de nuevo que el optional no está vacío.
#include <iostream>
#include <optional>
#include <string>
int main() {
std::optional<std::string> o = std::string("hello");
if (o) std::cout << o->size() << "\n";
}Proteger el acceso
El modismo seguro es: comprobar y después usar. Combinar la comprobación y el acceso evita tanto las excepciones como el comportamiento indefinido.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 7;
if (o.has_value()) {
int x = *o;
std::cout << x * 2 << "\n";
}
}Init-statement en if
Puede declarar y comprobar en una sola línea mediante un init-statement de if, de modo que el optional quede limitado al ámbito de la rama.
#include <iostream>
#include <optional>
std::optional<int> find() { return 3; }
int main() {
if (auto v = find(); v.has_value())
std::cout << *v << "\n";
}Transform (C++23)
Los ayudantes monádicos, como transform, aplican una función solo si hay un valor presente y devuelven un nuevo optional. Esto permite encadenar los cálculos de forma clara.
and_then para encadenar
and_then (C++23) llama a una función que también devuelve un optional y aplana el resultado; es ideal para pasos en los que cada uno puede fallar.
Elegir un accessor
Use value_or cuando tenga un valor predeterminado razonable, value() cuando un optional vacío sea un error que merezca una excepción, y */-> solo después de una comprobación explícita.
Evitar la desreferenciación sin comprobar
No llame nunca a *opt sin confirmar que el optional no está vacío. Es un comportamiento indefinido y una causa habitual de fallos.
Comprobación rápida
Compruebe sus conocimientos sobre el acceso a optionals.
Resumen
Ha aprendido a acceder a los optionals:
*y->después de una comprobación.value()lanza una excepción si está vacío.value_orproporciona un valor predeterminado.- Los métodos monádicos
transform/and_thenencadenan operaciones (C++23).
Preguntas frecuentes
¿La lección «Acceso a valores de optional» es gratis?
Sí — el texto completo de «Acceso a valores de optional» 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 «Acceso a valores de optional»?
Use value_or y has_value 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 «Acceso a valores de optional»?
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
- Representar la ausencia con optional
- Acceso a valores de optional
- Conceptos básicos de std::expected
- Patrones de gestión de errores