0Pricing
C++ Academy · Aula

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_or fornece um valor padrão.
  • transform/and_then moná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

  1. Representando ausência com optional
  2. Acessando valores de optional
  3. Noções básicas de std::expected
  4. Padrões de tratamento de erros
← Voltar para C++ Academy