Acessando valores de optional
Use value_or e has_value
Acessando valores de optional é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Operador de desreferenciação
A maneira mais rápida de ler um opcional é *opt, mas somente quando você tem certeza de que ele contém um valor, pois não há verificação.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 10;
if (o) std::cout << *o << "\n";
}O método value()
opt.value() retorna o valor, mas lança std::bad_optional_access se o opcional estiver vazio. Use-o quando um opcional vazio representar um erro 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 padrão
opt.value_or(fallback) retorna o valor contido quando ele está presente; caso contrário, retorna a alternativa. Não há ramificações nem exceções.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = std::nullopt;
std::cout << o.value_or(-1) << "\n"; // -1
}value_or com dados reais
Um uso comum é fornecer um padrão para configurações ou buscas ausentes.
#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 de seta
Para opcionais de tipos de classe, opt->member acessa os membros diretamente (novamente, supondo que o opcional não esteja vazio).
#include <iostream>
#include <optional>
#include <string>
int main() {
std::optional<std::string> o = std::string("hello");
if (o) std::cout << o->size() << "\n";
}Verifique antes de acessar
O padrão seguro é: verifique e depois use. Combinar a verificação com o acesso evita tanto exceções quanto comportamento indefinido.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 7;
if (o.has_value()) {
int x = *o;
std::cout << x * 2 << "\n";
}
}Declaração de inicialização em if
Você pode declarar e verificar em uma única linha usando uma declaração de inicialização em um if, mantendo o opcional no escopo do ramo.
#include <iostream>
#include <optional>
std::optional<int> find() { return 3; }
int main() {
if (auto v = find(); v.has_value())
std::cout << *v << "\n";
}Transformação (C++23)
Auxiliares monádicos, como transform, aplicam uma função somente quando há um valor, retornando um novo opcional. Isso encadeia os cálculos de forma clara.
and_then para encadeamento
and_then (C++23) chama uma função que também retorna um opcional, eliminando o aninhamento do resultado; é ideal para etapas que podem falhar individualmente.
Escolhendo um acessador
Use value_or quando tiver um padrão sensato, value() quando a ausência for um erro que justifique uma exceção e */-> somente depois de uma verificação explícita.
Evite a desreferenciação sem verificação
Nunca chame *opt sem confirmar que o opcional não está vazio. Isso resulta em comportamento indefinido e é uma fonte comum de falhas.
Verificação rápida
Verifique sua compreensão sobre o acesso a opcionais.
Recapitulação
Você aprendeu a acessar opcionais:
*e->depois de uma verificação.value()lança uma exceção quando está vazio.value_orfornece um valor padrão.transform/and_thenmonádicos encadeiam operações (C++23).
Perguntas Frequentes
A aula “Acessando valores de optional” é grátis?
Sim — o texto completo de “Acessando valores de optional” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Acessando valores de optional”?
Use value_or e has_value Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Acessando valores de optional”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Representando ausência com optional
- Acessando valores de optional
- Noções básicas de std::expected
- Padrões de tratamento de erros