Trilha de estudo
Trilha C/C++: tudo o que estudar, tópico por tópico
Avaliacao abrangente de C/C++ cobrindo fundamentos de C, programacao orientada a objetos, templates, containers e algoritmos da STL, gerenciamento de memoria, ponteiros inteligentes, semantica de movimentacao, multithreading, metaprogramacao e recursos modernos de C++ (C++11 a C++23).
Resposta curta
Para aprender C/C++, percorra 6 módulos e 24 tópicos na ordem em que um apoia o próximo. Comece por Fundamentos de C e siga para Basico de C++ e C++ Orientado a Objetos. Use o mapa como checklist, ou meça seu nível e estude só o que falta.
O que você vai estudar
Os tópicos estão agrupados por módulo. Abra um para ver os objetivos e os conceitos-chave.
1 · Fundamentos de C4 tópicos
Variaveis & Tipos
Tipos de dados fundamentais (int, float, double, char, bool), modificadores de tipo (short, long, unsigned), conversao de tipos, sizeof, typedef, aliases de tipo, qualificador const, volatile
Objetivos
- Declarar variaveis com tipos e modificadores apropriados
- Compreender regras de conversao e promocao de tipos
Conceitos-chave
- tipos de dados fundamentais
- modificadores de tipo (short, long, unsigned)
- conversao de tipo implicita e explicita
- operador sizeof
- typedef e aliases com using
- qualificador const
- palavra-chave volatile
- regras de promocao de tipo
Fluxo de Controle
if/else, switch/case, lacos for, while/do-while, break/continue, operador ternario, goto, lacos aninhados, avaliacao de curto-circuito
Objetivos
- Escrever construcoes condicionais e de laco corretas
- Compreender o comportamento de fall-through do switch
Conceitos-chave
- instrucoes if/else
- switch/case com fall-through
- laco for
- while e do-while
- break e continue
- operador ternario
- avaliacao de curto-circuito
- lacos aninhados
Funcoes
Declaracoes e definicoes de funcoes, passagem de parametros (por valor), tipos de retorno, prototipos de funcao, argumentos padrao, funcoes inline, recursao, sobrecarga de funcoes
Objetivos
- Escrever funcoes com assinaturas e prototipos adequados
- Compreender semantica de passagem por valor e recursao
Conceitos-chave
- declaracao vs definicao de funcao
- passagem por valor
- tipos de retorno
- prototipos de funcao
- argumentos padrao
- funcoes inline
- recursao
- sobrecarga de funcoes
Ponteiros & Arrays
Declaracao e desreferenciacao de ponteiros, aritmetica de ponteiros, arrays, strings C, arrays multidimensionais, ponteiros void, ponteiros nulos, ponteiros de funcao
Objetivos
- Usar ponteiros e aritmetica de ponteiros corretamente
- Compreender o decay de array para ponteiro
Conceitos-chave
- declaracao e desreferenciacao de ponteiros
- aritmetica de ponteiros
- arrays e decay para ponteiros
- strings C (char*)
- arrays multidimensionais
- ponteiros void
- nullptr
- ponteiros de funcao
2 · Basico de C++4 tópicos
Strings & E/S
std::string, operacoes com strings, streams de E/S do C++ (cin, cout, cerr), E/S de arquivo (ifstream, ofstream), string streams, getline, formatacao com iomanip
Objetivos
- Usar std::string e streams de E/S efetivamente
- Ler e escrever arquivos com fstream
Conceitos-chave
- std::string
- concatenacao e comparacao de strings
- cin/cout/cerr
- ifstream/ofstream
- stringstream
- getline
- formatacao com iomanip
- string_view (C++17)
Referencias
Referencias lvalue, referencias const, passagem por referencia, referencia vs ponteiro, referencias pendentes, colapso de referencias, retorno de referencias
Objetivos
- Passar argumentos por referencia eficientemente
- Distinguir referencias de ponteiros
Conceitos-chave
- referencia lvalue (&)
- referencia const (const &)
- passagem por referencia
- referencia vs ponteiro
- referencias pendentes
- regras de colapso de referencias
- retorno de referencias com seguranca
- referencia para const estende lifetime
Namespaces
Declaracao de namespace, diretivas using, declaracoes using, namespaces aninhados, namespaces anonimos, namespaces inline, aliases de namespace, ADL (busca dependente de argumento)
Objetivos
- Organizar codigo com namespaces
- Compreender ADL e suas implicacoes
Conceitos-chave
- declaracao de namespace
- diretiva using
- declaracao using
- namespaces aninhados (C++17)
- namespaces anonimos
- namespaces inline
- aliases de namespace
- ADL (busca de Koenig)
Auto & Inferencia de Tipos
Palavra-chave auto, decltype, regras de deducao de tipo, tipos de retorno trailing, structured bindings (C++17), auto com referencias e const, decltype(auto)
Objetivos
- Aplicar auto e decltype para codigo mais limpo
- Usar structured bindings para desempacotar tuplas/structs
Conceitos-chave
- palavra-chave auto
- decltype
- regras de deducao de tipo
- tipos de retorno trailing
- structured bindings
- auto com const e referencias
- decltype(auto)
- CTAD (deducao de argumento de template de classe)
3 · C++ Orientado a Objetos4 tópicos
Classes
Definicao de classe, especificadores de acesso, construtores, destrutores, listas de inicializacao de membros, ponteiro this, membros estaticos, funcoes friend, inicializacao agregada
Objetivos
- Projetar classes com encapsulamento adequado
- Aplicar a Regra de Tres/Cinco/Zero
Conceitos-chave
- class vs struct
- public/private/protected
- construtores e destrutores
- lista de inicializacao de membros
- ponteiro this
- membros estaticos
- funcoes friend
- Regra de Tres/Cinco/Zero
Heranca
Heranca simples e multipla, controle de acesso em heranca, classes base virtuais, ordem de construtores/destrutores, fatiamento, problema do diamante, membros protegidos
Objetivos
- Implementar hierarquias de heranca corretamente
- Resolver o problema do diamante com classes base virtuais
Conceitos-chave
- heranca simples
- heranca multipla
- heranca public/protected/private
- classes base virtuais
- ordem de chamada de construtores/destrutores
- fatiamento de objetos
- problema do diamante
- declaracoes using em classes derivadas
Polimorfismo
Funcoes virtuais, funcoes virtuais puras, classes abstratas, mecanismo vtable, especificadores override e final, dynamic_cast, RTTI, destrutores virtuais
Objetivos
- Implementar polimorfismo em tempo de execucao com funcoes virtuais
- Compreender o mecanismo de vtable
Conceitos-chave
- funcoes virtuais
- funcoes virtuais puras
- classes abstratas
- vtable e vptr
- especificador override
- especificador final
- dynamic_cast e RTTI
- destrutores virtuais
Sobrecarga de Operadores
Sobrecarga de operadores aritmeticos, de comparacao e de stream, sobrecargas membro vs nao-membro, operadores de conversao, operadores de subscrito e chamada de funcao, literais definidos pelo usuario
Objetivos
- Sobrecarregar operadores seguindo convencoes C++
- Escolher entre sobrecargas membro e nao-membro
Conceitos-chave
- sobrecarga de operadores aritmeticos
- operadores de comparacao (spaceship <=> C++20)
- operadores de stream (<<, >>)
- sobrecargas membro vs nao-membro
- operadores de conversao
- operador de subscrito []
- operador de chamada de funcao ()
- literais definidos pelo usuario
4 · STL & Templates4 tópicos
Templates
Templates de funcao, templates de classe, especializacao de template, especializacao parcial, parametros de template nao-tipo, templates variadicos, SFINAE, concepts (C++20)
Objetivos
- Escrever codigo generico com templates de funcao e classe
- Aplicar especializacao de template e SFINAE
Conceitos-chave
- templates de funcao
- templates de classe
- especializacao de template
- especializacao parcial
- parametros de template nao-tipo
- templates variadicos
- SFINAE
- concepts (C++20)
Containers da STL
Containers sequenciais (vector, deque, list, array, forward_list), containers associativos (set, map, multiset, multimap), containers nao-ordenados (unordered_map, unordered_set), adaptadores de container (stack, queue, priority_queue)
Objetivos
- Escolher containers apropriados por caso de uso e complexidade
- Compreender regras de invalidacao de iteradores
Conceitos-chave
- std::vector
- std::map / std::unordered_map
- std::set / std::unordered_set
- std::deque / std::list
- std::array
- std::stack / std::queue
- std::priority_queue
- garantias de complexidade de containers
Iteradores & Algoritmos
Categorias de iteradores (input, output, forward, bidirecional, acesso aleatorio), algoritmos da STL (sort, find, transform, accumulate, copy), ranges (C++20), views
Objetivos
- Aplicar algoritmos da STL efetivamente
- Usar ranges C++20 para processamento componivel de dados
Conceitos-chave
- categorias de iteradores
- begin/end e cbegin/cend
- std::sort / std::find / std::transform
- std::accumulate / std::reduce
- std::copy / std::move
- std::ranges (C++20)
- range views e pipes
- comparadores customizados
Expressoes Lambda
Sintaxe de lambda, clausulas de captura (por valor, por referencia, init-capture), lambdas genericas, lambdas mutaveis, std::function, std::bind, funcoes de ordem superior
Objetivos
- Escrever lambdas com modos de captura apropriados
- Usar lambdas com algoritmos da STL
Conceitos-chave
- sintaxe de lambda [capturas](params){corpo}
- captura por valor [=]
- captura por referencia [&]
- init-capture (C++14)
- lambdas genericas (parametros auto)
- lambdas mutaveis
- std::function
- lambda imediatamente invocada
5 · Memoria & Concorrencia4 tópicos
Ponteiros Inteligentes
std::unique_ptr, std::shared_ptr, std::weak_ptr, deleters customizados, make_unique/make_shared, transferencia de ownership, enable_shared_from_this, aliasing de ponteiros
Objetivos
- Escolher o ponteiro inteligente adequado para cada modelo de ownership
- Evitar armadilhas comuns com ponteiros inteligentes
Conceitos-chave
- std::unique_ptr
- std::shared_ptr
- std::weak_ptr
- std::make_unique / std::make_shared
- deleters customizados
- transferencia de ownership (std::move)
- enable_shared_from_this
- construtor de aliasing
Semantica de Movimentacao
Referencias rvalue, std::move, construtores de movimentacao, atribuicao por movimentacao, perfect forwarding, std::forward, elisao de copia, RVO/NRVO
Objetivos
- Implementar construtores e operadores de atribuicao por movimentacao
- Aplicar perfect forwarding corretamente
Conceitos-chave
- referencias rvalue (&&)
- std::move
- construtor de movimentacao
- operador de atribuicao por movimentacao
- perfect forwarding
- std::forward
- elisao de copia (RVO/NRVO)
- referencias universais
Multithreading
std::thread, std::mutex, std::lock_guard, std::unique_lock, variaveis de condicao, std::async, std::future, std::promise, operacoes atomicas, seguranca de threads
Objetivos
- Escrever codigo thread-safe com mutexes e atomicos
- Usar async/future para execucao concorrente de tarefas
Conceitos-chave
- std::thread
- std::mutex / std::lock_guard
- std::unique_lock
- std::condition_variable
- std::async / std::future
- std::promise
- std::atomic
- corridas de dados e seguranca de threads
Gerenciamento de Memoria
new/delete, placement new, alinhamento de memoria, alocadores, vazamentos de memoria, stack vs heap, padrao RAII, alocadores customizados, pools de memoria
Objetivos
- Aplicar RAII para gerenciamento deterministico de recursos
- Detectar e prevenir vazamentos de memoria
Conceitos-chave
- operadores new/delete
- placement new
- alinhamento de memoria (alignas, alignof)
- alocadores customizados
- padrao RAII
- alocacao em stack vs heap
- pools de memoria
- deteccao de vazamento de memoria
6 · C++ Avancado4 tópicos
Recursos Modernos de C++
Recursos C++17 (optional, variant, any, filesystem, if constexpr), recursos C++20 (concepts, modules, coroutines, comparacao three-way), recursos C++23 (expected, deducing this, std::print)
Objetivos
- Aplicar tipos vocabulario modernos de C++ (optional, variant)
- Usar concepts para restringir templates
Conceitos-chave
- std::optional
- std::variant / std::visit
- std::any
- std::filesystem
- if constexpr
- concepts e requires (C++20)
- modules (C++20)
- coroutines (C++20)
Metaprogramacao com Templates
Computacao em tempo de compilacao, type traits (std::is_integral, std::enable_if), constexpr if, consteval, tecnicas SFINAE, tag dispatch, CRTP, expression templates
Objetivos
- Aplicar metaprogramacao com templates para computacao em tempo de compilacao
- Usar CRTP e design baseado em politicas
Conceitos-chave
- type traits (std::is_*, std::enable_if)
- computacao constexpr
- consteval (C++20)
- tecnicas SFINAE
- tag dispatch
- CRTP (Curiously Recurring Template Pattern)
- expression templates
- design baseado em politicas
Otimizacao de Desempenho
Estruturas de dados cache-friendly, predicao de branch, intrinsicos SIMD, ferramentas de profiling (perf, valgrind, sanitizers), benchmarking, otimizacoes do compilador, otimizacao em tempo de link, otimizacao guiada por perfil
Objetivos
- Realizar profiling e otimizar programas C++ sistematicamente
- Aplicar otimizacoes cache-friendly e SIMD
Conceitos-chave
- estruturas de dados cache-friendly
- dicas de predicao de branch
- intrinsicos SIMD
- profiling (perf, valgrind)
- sanitizers (ASan, TSan, UBSan)
- otimizacoes do compilador (-O2, -O3)
- otimizacao em tempo de link (LTO)
- otimizacao guiada por perfil (PGO)
Sistemas de Build & Ferramentas
CMake, modelo de compilacao (preprocessamento, compilacao, linkagem), arquivos de cabecalho e include guards, bibliotecas estaticas vs dinamicas, gerenciadores de pacotes (Conan, vcpkg), compilacao cruzada, sanitizers
Objetivos
- Configurar builds com CMake efetivamente
- Compreender o modelo de compilacao e linkagem do C++
Conceitos-chave
- CMake (CMakeLists.txt, targets, propriedades)
- modelo de compilacao (preprocessamento, compilacao, linkagem)
- header guards e #pragma once
- bibliotecas estaticas vs dinamicas (.a/.so/.dll)
- gerenciadores de pacotes Conan / vcpkg
- compilacao cruzada
- flags de compilacao e warnings
- compatibilidade ABI
Níveis: Júnior, Pleno, Sênior e Especialista
Explique com suas palavras
Corrigido por IA · sem cadastro · 1 perguntaSem alternativas para chutar: você escreve, a IA corrige com a rubrica do tópico e diz em que nível sua resposta está.
Já estuda C/C++?
A avaliação mede tópico por tópico, e o plano pula o que você já sabe.
Aberto para ler. A conta só é necessária para ser medido.
Perguntas frequentes
Por onde começar a estudar C/C++?
Comece por Fundamentos de C: Variaveis & Tipos, Fluxo de Controle e Funcoes. O mapa ordena os tópicos pelo que depende de quê, então cada um prepara o seguinte.
Quanto tempo leva uma avaliação completa de C/C++?
Uma avaliação completa desta trilha leva cerca de 45 minutos. O tempo de estudo depende de onde você começa; o diagnóstico mostra quais tópicos você pode pular.
Preciso de conta para usar esta página?
Não. O mapa, os objetivos e os conceitos-chave são abertos. A conta só é necessária para ser medido, ver seu gap por tópico e receber um plano.