for baseado em intervalos, nullptr e enum class
Use funcionalidades práticas do C++11: for baseado em intervalos, nullptr e enumerações com tipos fortes
for baseado em intervalos, nullptr e enum class é 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.
Três ganhos rápidos do C++11
O C++11 trouxe muitas pequenas melhorias. Três que usará todos os dias: range-based for, nullptr e enum class.
Recapitulação de range-based for
Itere sobre qualquer contêiner que tenha begin() e end(), sem aritmética de índices.
for (const auto& x : v) {
process(x);
}O que ele substitui
O laço verboso baseado em iteradores se torna uma única linha.
// Before C++11
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
process(*it);
}nullptr supera NULL
nullptr é um literal de ponteiro nulo tipado. Evita a ambiguidade na resolução de sobrecarga de NULL (uma macro para 0).
void f(int);
void f(int*);
f(NULL); // calls f(int)
f(nullptr); // calls f(int*)Por que nullptr vence
Use nullptr de forma consistente:
- Tipo distinto (
std::nullptr_t) - Intenção mais clara
- Funciona na metaprogramação de modelos
- Não pode ser convertido acidentalmente em
int
enum simples: uma armadilha perigosa
Os enums no estilo antigo expõem seus nomes no escopo que os contém e são convertidos implicitamente em int.
enum Color { RED, GREEN, BLUE };
int c = RED; // implicit conversion, no warning
// RED, GREEN, BLUE leak into global scopeenum class: com escopo e tipado
O enum class do C++11 exige qualificação e proíbe a conversão implícita para int.
enum class Color { Red, Green, Blue };
Color c = Color::Red;
// int n = Color::Red; // ERROR
std::cout << static_cast<int>(c); // explicit conversionEspecificando o tipo subjacente
Você pode fixar o tamanho de armazenamento de um enum class como um tipo inteiro específico.
enum class Status : uint8_t { OK = 0, FAIL = 1, RETRY = 2 };Declarando enum class antecipadamente
Como o tipo subjacente é conhecido, os enum classes podem ser declarados antecipadamente — algo útil para evitar inclusões desnecessárias de cabeçalhos.
// header A
enum class Color : int;
// header B (full definition)
enum class Color : int { Red, Green, Blue };Quando enum simples é OK
Os enums simples ainda têm utilidade: máscaras de bits de sinalizadores inteiros quando você realmente deseja a conversão implícita. Documente explicitamente essa decisão de projeto.
Dica de migração
Ao modernizar uma base de código, converta os enums simples em enum class gradualmente. Procure os locais que dependem da conversão implícita para int e adicione static_cast.
Verificação rápida
O que torna enum class mais seguro do que um enum simples?
Recapitulação
Três ganhos rápidos do C++11: o range-based for elimina o código repetitivo dos iteradores, nullptr substitui NULL e enum class fornece enums com escopo e segurança de tipos. Use os três por padrão.
Perguntas Frequentes
A aula “for baseado em intervalos, nullptr e enum class” é grátis?
Sim — o texto completo de “for baseado em intervalos, nullptr e enum class” é 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 “for baseado em intervalos, nullptr e enum class”?
Use funcionalidades práticas do C++11: for baseado em intervalos, nullptr e enumerações com tipos fortes 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 “for baseado em intervalos, nullptr e enum class”?
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
- auto, decltype e dedução de tipos
- for baseado em intervalos, nullptr e enum class
- Expressões lambda: captura, mutable e genéricas
- Associações estruturadas e if-init no C++17