optional y value_or en C++
Quizás-un-valor sin números centinela: std::optional convierte la entrada mala en un no limpio.
#include <optional>
#include <string>
std::optional<int> parse_port(const std::string &text) {
if (text.empty() ||
text.find_first_not_of("0123456789") != text.npos) {
return std::nullopt;
}
return std::stoi(text);
}
int port_or_default(const std::string &text) {
return parse_port(text).value_or(8080);
}
Cómo funciona
parse_portdevuelvestd::optional<int>— un valor si tiene éxito,std::nulloptsi no.find_first_not_ofrechaza cualquier texto con un no-dígito antes de questd::stoicorra siquiera.value_or(8080)desenvuelve el resultado o cae al valor por defecto en una sola llamada.
Palabras clave y builtins usados aquí
constifintreturn
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 307
- Tokens
- 89
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 76 segundos.
Paso 1 de 3 en Toques modernos; paso 22 de 27 en Fundamentos del lenguaje.