Linguagem C++ / Módulo 1: Introdução e Ecossistema / História do C++

História do C++

A história começa com um estudante

Em 1957, na Dinamarca, nasceu Bjarne Stroustrup. Aos 18 anos, em 1975, ele decidiu que faria o curso de Ciência da Computação. Ficou em dúvida sobre qual universidade escolher, mas acabou optando por uma que o permitisse não sair sua cidade natal. A universidade era boa, mas sem tradição na área: seria a primeira turma de Ciência da Computação daquela universidade.

Ali ele fez amizades, perdeu o cabelo, conheceu a futura esposa e obteve o título de mestre em Ciência da Computação — tudo isso no intervalo de 6 anos.

Embora tenha tido contato com toda a diversidade de tópicos clássicos de uma graduação em Ciência da Computação, foi uma ferramenta específica que definiu seu futuro: a linguagem Simula. Uma das primeiras a implementar a Orientação a Objetos, a ideia de organizar e modelar softwares em torno de objetos e classes o cativou.

O passo natural seguinte ao mestrado era o doutorado, e a própria universidade já oferecia o programa. O problema: as áreas de pesquisa disponíveis eram todas voltadas para matemática pura, e Bjarne tinha outros interesses.

Foi então que decidiu, pela primeira vez se mudar da cidade natal — e para bem longe. Mas não sozinho, sua namorada iria acompanhá-lo. Ela estava concluindo a graduação, então se mudaria com ele e faria o próprio mestrado em Serviço Social enquanto ele fazia o doutorado. Foi então que em 1979, casaram-se e foram juntos para o Reino Unido.

Durante os 4 anos de doutorado, tiveram a primeira filha. E quando Bjarne estava prestes a defender a tese, aos 28 anos, assistiu a uma palestra que mudou tudo.

A palestra, a ligação, a travessia

O palestrante era representante de uma empresa americana: a Bell Labs. Sediada em Murray Hill, Nova Jersey, era simplesmente o maior centro de inovação do planeta naquela época. Era onde Dennis Ritchie, criador da linguagem C, trabalhava. Era onde Ken Thompson, criador do Unix — o sistema que hoje é a base do macOS e que inspirou fortemente o Linux —, trabalhava. No final da apresentação, o representante deixou o telefone para contato.

Bjarne ligou, se apresentou e perguntou se havia alguma vaga disponível na Bell Labs. A resposta foi não — naquele momento não havia nenhuma abertura. Mas o convidaram para apresentar a tese de doutorado aos funcionários da empresa, uma prática comum entre empresas de tecnologia de ponta.

Ele decidiu ir, afinal era a maior empresa de tecnologia do mundo naquele momento. Pagou a passagem do próprio bolso e atravessou o Atlântico.

Chegando lá, foi levado para apresentar o trabalho em uma subsidiária menor da empresa. A apresentação foi tão boa que decidiram recomendá-lo à sede principal. Começou então a ser sabatinado por diferentes membros da Bell Labs sobre a sua pesquisa — até que decidiram fazer uma oferta: um contrato experimental de 1 ano.

A proposta era direta: "Aplique o que você aprendeu criando algo interessante. Se o resultado agradar, renovamos o contrato."

O nascimento do C++

Bjarne sabia exatamente o que queria criar. A ideia estava na cabeça desde o mestrado: combinar o modelo de objetos e classes do Simula com a velocidade e a proximidade ao hardware da linguagem C, que havia sido criada ali mesmo, na Bell Labs. Duas linguagens que faziam coisas opostas e que, juntas, poderiam fazer algo que nenhuma das duas conseguia sozinha.

Estava nascendo ali o "C com Classes", que mais tarde seria batizado de C++.

Dentro da Bell Labs, Bjarne tirava dúvidas diretamente com Dennis Ritchie e Ken Thompson, numa relação marcada por respeito mútuo e apoio prático. O próprio Dennis Ritchie reconheceu publicamente, anos depois, que o C++ beneficiou a linguagem C de formas inesperadas: ajudou a popularizar a sua sintaxe e serviu como laboratório para testar recursos antes de incorporá-los ao C.

Uma das escolhas mais inteligentes de Bjarne foi a criação do Cfront: um compilador que traduzia código C++ para C puro, que só então era compilado em executável pelo compilador de C já existente. Essa decisão teve duas consequências importantes. Primeiro, simplificou muito a primeira versão do compilador — em vez de gerar código de máquina diretamente, ele reutilizava toda a infraestrutura já existente dos compiladores de C. Segundo, e mais importante do ponto de vista de adoção, desarmou a resistência interna na Bell Labs: uma equipe que já usava C não precisava trocar nada da sua toolchain — bastava adicionar o Cfront no início do processo e continuar usando o mesmo compilador, o mesmo linker, as mesmas ferramentas de análise que já conhecia.

O contrato de 1 ano foi se estendendo, e em 1985 — 6 anos depois de defender o doutorado — Bjarne e a Bell Labs lançaram a primeira versão comercial do Cfront, também conhecida como C++ 1.0.

O crescimento — e o que aconteceu com o C

O C e o C++ explodiram no mercado e se tornaram a espinha dorsal de softwares críticos em empresas como Microsoft, Apple, Adobe, entre várias outras. Motores de jogos, sistemas operacionais, bancos de dados, interfaces gráficas — tudo isso passou a ser escrito em C e em C++.

O C continuou dominando qualquer contexto onde uma linguagem imperativa enxuta era suficiente — firmware, kernels, sistemas embarcados, protocolos de rede de baixo nível. O C++ avançou nos domínios onde a complexidade do software justificava abstrações mais ricas.

De quem é o C++?

Essas duas linguagens se tornaram importantes demais para ficarem concentradas nas mãos de uma única empresa. Foi por isso que, na década de 90, nasceu um consórcio internacional dirigido pela ISO — a Organização Internacional de Padronização.

A ISO pode parecer um nome distante, mas você já conviveu com o trabalho dela hoje mesmo. O formato de data que aparece no seu sistema operacional — YYYY-MM-DD — é o padrão ISO 8601. O cartão de crédito na sua carteira tem as dimensões que tem porque a ISO definiu que todo cartão do planeta deveria medir exatamente 85,6mm × 54mm. O JPEG que você usa para salvar fotos também é um padrão ISO. É esse o nível de alcance dessa organização.

No caso do C++, pense no consórcio como uma mesa redonda onde sentam engenheiros do Google, da Apple, da Microsoft, da Intel, cientistas de universidades do mundo todo e o próprio Bjarne Stroustrup. A partir desse momento, nenhuma empresa muda o C++ sozinha. Se o Google quiser adicionar um recurso novo à linguagem, precisa escrever uma proposta formal, apresentar ao comitê, debater, testar e votar. Se a maioria aprovar, aquilo vira o Padrão Oficial.

O primeiro padrão formal foi o C++98, lançado em 1998, 13 anos depois do C++ 1.0. No caminho até lá, o comitê havia adicionado recursos que moldaram a linguagem — e que você vai estudar ao longo deste curso:

  • Tratamento de Exceções: mecanismo para o programa lidar com erros em tempo de execução sem quebrar de forma abrupta.
  • Templates: permitem criar funções e classes genéricas que funcionam com qualquer tipo de dado — são a base da STL e de boa parte do C++ moderno.
  • Namespaces: organizam o código e evitam conflitos entre funções com o mesmo nome em projetos grandes; é por isso que você vai ver std:: em todo canto.
  • STL (Standard Template Library): biblioteca padrão com estruturas de dados prontas — vetores dinâmicos, filas, listas, mapas — e algoritmos de ordenação e busca já otimizados.

O período de estagnação

Nem tudo são flores. Com tantas empresas e acadêmicos votando, o comitê travou: qualquer novo recurso passou a exigir a aprovação de um grupo enorme de gente, cada um representando os próprios interesses. Depois do C++98, a linguagem ficou praticamente congelada. Em 2003 saiu o C++03, que não trazia praticamente nenhuma evolução — apenas corrigia bugs e ambiguidades do padrão anterior.

Enquanto isso, o C++ foi perdendo espaço para linguagens que se modernizavam com muito mais frequência. O Java havia surgido em 1995 e dominava o mercado corporativo. O Python ganhava força nos anos 2000, especialmente na academia e em automação. O C# chegou em 2001 como a aposta da Microsoft para desenvolvimento moderno no Windows. Todas essas linguagens lançavam versões novas com recursos relevantes de forma regular, enquanto o C++ ficava parado. Para muitos, a linguagem já tinha ficado para trás.

O renascimento: C++11

O comitê percebeu que, ou se modernizava, ou a linguagem morreria. Lançou então, em 2011, o C++11 — uma reformulação profunda, não uma atualização incremental. Entre as principais adições, que você também vai encontrar em detalhes neste curso:

  • Semântica de movimento (move semantics): permite que recursos sejam "movidos" em vez de copiados quando a cópia seria desnecessária, com impacto direto em performance.
  • Ponteiros inteligentes (smart pointers): unique_ptr, shared_ptr e weak_ptr vieram para substituir o gerenciamento manual de memória com new e delete, tornando o código muito mais seguro.
  • Expressões lambda: funções anônimas definidas inline, que tornaram o uso de algoritmos da STL muito mais prático.
  • auto e inferência de tipos: o compilador passou a deduzir o tipo de uma variável pelo contexto, reduzindo verbosidade sem sacrificar a tipagem estática.
  • Range-based for: a forma moderna de iterar sobre coleções, sem precisar lidar com índices ou iteradores manualmente.
  • nullptr: substituiu o NULL do C, com semântica mais clara e segura.

Além dos recursos em si, o C++11 estabeleceu algo igualmente importante: um ritmo previsível de trabalho, com uma nova versão da linguagem a cada três anos. Foi assim que vieram o C++14, o C++17, o C++20, o C++23 e, agora, o C++26 — cada versão adicionando camadas sobre o que o C++11 já havia estabelecido.

Por que essa história importa para você

O primeiro motivo é prático: agora você sabe de onde vêm essas versões do C++ que aparecem em documentações, em vagas de emprego e em código de terceiros.

O segundo motivo é de perspectiva. O C++ que você vai aprender aqui é o resultado de mais de 40 anos de engenharia acumulada, de decisões tomadas por algumas das mentes mais brilhantes da computação. Não faz sentido nenhum se cobrar para entender tudo isso em duas semanas.

No próximo capítulo saímos da história e entramos na prática: vamos falar sobre os principais compiladores — as ferramentas que nos permitem usar essas diferentes versões do C++.