Voltar aos Cursos
AI013 Professional

Tutorial de C++ Moderno

Este tutorial tem como objetivo fornecer aos desenvolvedores experientes uma referência rápida sobre os novos recursos do C++11/14/17/20. Ele aborda melhorias na usabilidade da linguagem, melhorias de desempenho em tempo de execução, novos contêineres, ponteiros inteligentes e gerenciamento de memória, expressões regulares, programação concorrente e uma prévia do C++20.

4.8
30.0h
318 estudantes
2 curtidas
Inteligência Artificial
Começar a Aprender

Visão Geral do Curso

📚 Resumo do Conteúdo

Este tutorial foi projetado para fornecer aos desenvolvedores experientes uma referência rápida sobre os novos recursos do C++11/14/17/20. O conteúdo abrange melhorias na usabilidade da linguagem, melhorias em tempo de execução, o uso de novos contêineres, ponteiros inteligentes e gerenciamento de memória, expressões regulares, programação concorrente e uma prévia do C++20.

Acelere seu aprendizado com o C++11/14/17/20 e entre pela porta de entrada da programação moderna em C++.

Autor: 欧长坤 (Ou Changkun)

Agradecimentos: Licenciado sob a licença CC BY-NC-ND 4.0, agradecimentos a todos os contribuidores do GitHub e à comunidade relacionada.

🎯 Objetivos de Aprendizagem

  1. Identificar e verificar o ambiente do compilador C++ e a arquitetura-alvo usando ferramentas de linha de comando.
  2. Explicar a compatibilidade padrão e a história de sobreposição entre C (C89, C99, C11) e C++ (C++98, C++1x).
  3. Implementar vinculação cruzada de linguagens funcionais usando cabeçalhos extern "C" e fluxos de compilação de múltiplos estágios.
  4. Resolver ambiguidades de ponteiros usando nullptr e implementar lógica em tempo de compilação com constexpr e if constexpr.
  5. Simplificar declarações complexas usando auto, decltype e alias de tipo (using), garantindo um design robusto orientado a objetos com override e final.
  6. Projetar código altamente genérico usando templates variádicos, expressões fold e dedução de parâmetros de template não-tipo.
  7. Definir e implementar expressões Lambda usando diversos modos de captura (Valor, Referência, Expressão e Genérico).
  8. Utilizar std::function e std::bind para criar invólucros de função flexíveis e aplicações parciais de funções.
  9. Classificar expressões em Lvalues, Prvalues e Xvalues, e aplicar Semântica de Movimentação para otimizar o gerenciamento de recursos de classe.
  10. Diferenciar os modelos de memória e casos de uso de std::array (tamanho fixo, pilha) e std::vector (tamanho dinâmico, heap).

🔹 Lição 1: Evolução Histórica do C++ e Ambiente

Visão Geral: Esta lição aborda a base técnica do ambiente de desenvolvimento C++ e sua relação histórica com a linguagem C. Detalha como os padrões C++ (C++98 até C++1x) se sobrepõem aos padrões C (C89 até C11) e fornece os mecanismos específicos, como extern "C", necessários para compilar e vincular com sucesso bases de código mistas C e C++.

Resultados de Aprendizagem:

  • Identificar e verificar o ambiente do compilador C++ e a arquitetura-alvo usando ferramentas de linha de comando.
  • Explicar a compatibilidade padrão e a história de sobreposição entre C (C89, C99, C11) e C++ (C++98, C++1x).
  • Implementar vinculação cruzada de linguagens funcionais usando cabeçalhos extern "C" e fluxos de compilação de múltiplos estágios.

🔹 Lição 2: Usabilidade da Linguagem: Sintaxe Moderna e Templates

Visão Geral: Esta lição explora a evolução do C++ desde o C++11 até o C++20, focando em melhorias que aumentam a clareza do código, segurança de tipos e flexibilidade de templates. Os alunos dominarão recursos modernos de sintaxe como inferência de tipo, avaliação em tempo de compilação com constexpr e técnicas avançadas de template, incluindo templates variádicos e expressões fold.

Resultados de Aprendizagem:

  • Resolver ambiguidades de ponteiros usando nullptr e implementar lógica em tempo de compilação com constexpr e if constexpr.
  • Simplificar declarações complexas usando auto, decltype e alias de tipo (using), garantindo um design orientado a objetos robusto com override e final.
  • Projetar código altamente genérico usando templates variádicos, expressões fold e dedução de parâmetros de template não-tipo.

🔹 Lição 3: Melhorias em Tempo de Execução: Lambdas e Semântica de Movimentação

Visão Geral: Esta lição aborda melhorias críticas em tempo de execução introduzidas no C++ moderno (C++11/14), focando em construtos de programação funcional e gerenciamento eficiente de recursos. Os alunos dominarão expressões Lambda — incluindo capturas genéricas e por expressão do C++14 — e mergulharão nos mecanismos da Semântica de Movimentação, Categorias de Valor (Lvalues/Rvalues) e Encaminhamento Perfeito para eliminar cópias desnecessárias em aplicações de alto desempenho.

Resultados de Aprendizagem:

  • Definir e implementar expressões Lambda usando diversos modos de captura (Valor, Referência, Expressão e Genérico).
  • Utilizar std::function e std::bind para criar invólucros de função flexíveis e aplicações parciais de funções.
  • Classificar expressões em Lvalues, Prvalues e Xvalues, e aplicar Semântica de Movimentação para otimizar o gerenciamento de recursos de classe.

🔹 Lição 4: Contêineres Modernos: std::array

Visão Geral: Esta lição apresenta std::array, um contêiner introduzido no C++11 como alternativa moderna aos arrays tradicionais em C. Explora os benefícios de usar um contêiner de tamanho fixo que encapsula arrays brutos, oferecendo uma interface mais segura, compatível com a STL e alocação de memória na pilha.

Resultados de Aprendizagem:

  • Diferenciar os modelos de memória e casos de uso de std::array (tamanho fixo, pilha) e std::vector (tamanho dinâmico, heap).
  • Inicializar e gerenciar corretamente std::array usando funções membros como .size() e .empty().
  • Aplicar algoritmos da Biblioteca Padrão (STL) e loops baseados em faixa a objetos std::array.

🔹 Lição 5: Ponteiros Inteligentes e Gerenciamento de Memória RAII

Visão Geral: Esta lição apresenta o princípio de Aquisição de Recursos é Inicialização (RAII) como filosofia fundamental do gerenciamento de memória moderno em C++. Aborda a transição do manuseio manual de ponteiros para gestão automatizada usando std::unique_ptr para propriedade exclusiva, std::shared_ptr para compartilhamento baseado em contagem de referências e std::weak_ptr para quebrar dependências circulares.

Resultados de Aprendizagem:

  • Compreender e aplicar o princípio RAII para garantir que recursos sejam liberados quando saírem do escopo.
  • Implementar modelos de propriedade compartilhada e exclusiva usando std::shared_ptr e std::unique_ptr.
  • Identificar e resolver vazamentos de memória causados por referências circulares usando std::weak_ptr.

🔹 Lição 6: Expressões Regulares e Análise de Strings

Visão Geral: Esta lição aborda a implementação de Expressões Regulares usando a biblioteca padrão do C++11 (std::regex) e sua aplicação prática na análise de requisições HTTP. Os alunos aprenderão a sintaxe dos quantificadores regex, o uso de std::smatch para capturar resultados e a integração arquitetônica dessas ferramentas em um ambiente de servidor Web baseado em templates.

Resultados de Aprendizagem:

  • Identificar e aplicar caracteres especiais de expressão regular (quantificadores) para definir padrões de string.
  • Utilizar std::regex e std::smatch para validar nomes de arquivos e extrair dados de strings.
  • Implementar a lógica central do servidor, incluindo análise de requisições HTTP e mapeamento de recursos usando modelos modernos de memória e contêineres C++.

🔹 Lição 7: Paralelismo, Concorrência e Modelos de Memória

Visão Geral: Esta lição aborda a mudança fundamental no C++11 em direção a um modelo padronizado de multithreading. Transita desde o gerenciamento básico de threads e bloqueios baseados em RAII até primitivas de sincronização avançadas como futuros e variáveis de condição, concluindo com o rigoroso modelo de memória do C++11, operações atômicas e garantias de consistência de memória.

Resultados de Aprendizagem:

  • Gerenciar ciclos de vida de threads e proteger recursos compartilhados usando std::thread, std::mutex e wrappers RAII (std::lock_guard, std::unique_lock).
  • Implementar fluxos assíncronos e comunicação entre threads usando std::future, std::packaged_task e std::condition_variable.
  • Aplicar tipos std::atomic e selecionar estratégias adequadas de std::memory_order para garantir visibilidade de memória e evitar reordenação ilegal de instruções.

🔹 Lição 8: Biblioteca Padrão: Atualizações do Sistema de Arquivos

Visão Geral: Esta lição explora a evolução da Biblioteca Padrão do C++, focando nas funcionalidades de alto nível introduzidas no C++11 e em padrões posteriores. Destaca a transição de implementações específicas de plataforma ou de baixo nível para utilitários padronizados de alto nível, como std::filesystem e ferramentas de concorrência.

Resultados de Aprendizagem:

  • Identificar os principais componentes de concorrência adicionados à Biblioteca Padrão no C++11.
  • Reconhecer std::filesystem como uma grande adição para gerenciamento moderno de caminhos e arquivos.
  • Compreender o papel de abstrações de alto nível na modernização do desenvolvimento em C++.

🔹 Lição 9: Recursos Modernos Variados

Visão Geral: Esta lição cobre uma seleção de recursos impactantes introduzidos no C++11 e refinados em padrões posteriores para melhorar segurança de tipos, desempenho e legibilidade de código. Os alunos aprenderão sobre o tipo long long int, especificações de exceção com noexcept, literais de string aprimorados e literais definidos pelo usuário, além de controle granular sobre alinhamento de memória via alignof e alignas.

Resultados de Aprendizagem:

  • Identificar e implementar o tipo long long int para precisão inteira estendida.
  • Aplicar o especificador noexcept para otimizar o tratamento de exceções e usar o operador noexcept para consultar a segurança de funções.
  • Utilizar Literais de String Bruta para simplificar definições complexas de strings e criar Literais Definidos pelo Usuário para sufixos personalizados de tipos.

🔹 Lição 10: C++20: O Futuro da Linguagem

Visão Geral: Esta lição apresenta os "Quatro Pilares" do C++20: Conceitos, Módulos, Coroutines e Faixas. Esses recursos representam a evolução mais significativa da linguagem desde o C++11, focando em melhorar a segurança de templates, eficiência de compilação, programação assíncrona e processamento de dados em estilo funcional.

Resultados de Aprendizagem:

  • Identificar e descrever os quatro principais recursos introduzidos no padrão C++20.
  • Explicar o papel de Conceitos e Restrições na melhoria do tratamento de erros em templates e no design.
  • Diferenciar a abordagem tradicional baseada em cabeçalhos do novo sistema de Módulos.