Pular para conteúdo

C++: Visão Geral e Toolchain

C++ é uma linguagem compilada e estaticamente tipada, padronizada pela ISO. Ela oferece estilos por valores, procedural, orientado a objetos, genérico e funcional, com controle direto sobre representação e vida dos recursos.

Esta trilha usa C++20 como base executável. A página oficial distingue padrões publicados de trabalho em andamento.

Objetivos de aprendizado

  • distinguir pré-processamento, compilação, linking e execução;
  • raciocinar sobre valores, referências, vida útil e posse;
  • usar RAII em vez de limpeza manual;
  • entender cópia, movimentação e restrições genéricas;
  • selecionar contêineres e algoritmos por contrato; e
  • escrever concorrência sem corridas de dados.

Um primeiro programa

#include <iostream>

int main() {
    std::cout << "Hello, world!\n";
}

Em implementação hosted, main é a entrada. Chegar à chave final retorna zero. std::cout é um stream padrão disponibilizado por <iostream>.

Modelo de tradução

  1. pré-processamento trata #include e condicionais;
  2. compilação verifica regras e produz arquivo objeto;
  3. linking resolve definições em objetos e bibliotecas;
  4. o ambiente carrega e executa.

Uma unidade de tradução é aproximadamente um fonte após pré-processamento. Declaração introduz nome e tipo; definição fornece a entidade. A One Definition Rule controla definições por programa e definições idênticas entre unidades.

Categorias de diagnóstico e comportamento

  • ill-formed, diagnostic required: exige ao menos um diagnóstico;
  • ill-formed, no diagnostic required: inválido, sem diagnóstico obrigatório;
  • implementation-defined: implementação escolhe e documenta;
  • unspecified: uma alternativa permitida ocorre sem documentação obrigatória;
  • comportamento indefinido: o padrão não impõe requisitos à execução.

Comportamento indefinido não é exceção. Parecer funcionar não valida acesso fora dos limites, uso após fim da vida ou corrida de dados.

Build básico

c++ -std=c++20 -Wall -Wextra -Wpedantic -Werror main.cpp -o program
./program

Warnings dependem da implementação e não provam correção. Builds de release, símbolos, sanitizers e otimização devem ser configurações intencionais distintas.

Sequência

Continue com tipos, valores e referências e RAII antes de usar ponteiros proprietários diretamente.