Um momento
Todos os artigos
C++ 13 min de leitura

O Que É a Linguagem de Programação C++? Um Guia Simples da Linguagem por Trás de Jogos e Navegadores

Um guia simples e sem jargões sobre o C++, a linguagem por trás de videogames, navegadores e muitos programas do dia a dia. Entenda o que ele acrescenta ao C, como funcionam as classes e a limpeza automática e por que ele é rápido e complexo.

nbkhope
Nesta página

Se você já jogou um videogame grande, navegou na web pelo Chrome, editou uma foto ou assistiu a um vídeo no computador, você usou um software escrito em C++ (pronuncia-se "C mais mais"). Ela é uma das linguagens de programação mais usadas do mundo, principalmente em programas que precisam ser muito rápidos e muito grandes ao mesmo tempo.

Este artigo explica, em linguagem simples, o que é o C++, como ele nasceu da linguagem C, as principais ideias que ele trouxe, onde ele é usado e por que os programadores ao mesmo tempo o adoram e o acham desafiador.

De onde vem o nome

No C, escrever ++ depois de algo quer dizer "some um a isso". Então contador++ quer dizer "o contador sobe um". O nome C++ é uma piada de programador: é o C, mais um, ou "o C, um passo adiante".

A linguagem foi criada por Bjarne Stroustrup, um cientista da computação dinamarquês que trabalhava no Bell Labs, o mesmo laboratório de pesquisa onde o C nasceu. Em 1979, ele começou a trabalhar no que chamou de "C com Classes". Ele adorava a velocidade do C, mas trabalhava com programas grandes e complicados e queria jeitos melhores de organizá-los. Em 1983, a linguagem ganhou o novo nome, C++.

O C++ é o C com muito mais coisa por cima

O jeito mais simples de pensar no C++ é como camadas acrescentadas por cima do C:

C++ é o C com muito mais coisa por cima, mostrado como caixas uma dentro da outra. No centro está o C: quase todo o C continua funcionando em C++. Em volta, classes e objetos, que juntam dados e ações num pacote só. Depois, a limpeza automática: a memória é devolvida quando um objeto termina. Depois, os templates: uma receita que funciona para vários tipos. E, por fora, a biblioteca padrão: listas, textos, ordenação, matemática e mais, prontos. Você só paga pelo que usa: recursos que você não usa não deixam o programa mais lento

Quase todo programa em C pode virar um programa em C++ com poucas mudanças, ou nenhuma. Mas o C++ acrescenta ferramentas poderosas para construir programas grandes e uma promessa que costuma ser chamada de princípio do custo zero (zero-overhead principle): você não paga pelo que não usa, e o que você usa deve ser tão rápido quanto se você tivesse escrito tudo à mão, com cuidado.

Vamos ver as três maiores novidades.

Grande ideia 1: classes e objetos

Programas de verdade lidam com "coisas": jogadores e inimigos num jogo, abas e páginas num navegador, camadas num editor de fotos. O C++ deixa você descrever um tipo de coisa uma vez, como uma classe, e depois criar quantos objetos desse tipo quiser.

Uma classe é como uma planta de construção. Ela descreve quais dados cada coisa guarda e o que ela sabe fazer. Os objetos são as coisas de verdade construídas a partir dessa planta:

Uma classe é uma planta, e objetos são as coisas construídas com ela. A planta class Carro lista os dados que guarda, cor e velocidade, e o que sabe fazer, acelerar e frear. Três objetos são construídos com ela: meuCarro, vermelho, a 20 km/h; seuCarro, azul, a 0 km/h; e taxi, amarelo, a 50 km/h. Uma planta, muitos objetos: cada carro guarda a sua própria cor e velocidade, e todos sabem acelerar e frear

Veja como isso fica em C++:

1#include <iostream>
2#include <string>
3
4class Carro {
5public:
6    std::string cor;
7    int velocidade = 0;
8
9    void acelerar() { velocidade += 10; }
10    void frear() { velocidade = 0; }
11};
12
13int main() {
14    Carro meuCarro;
15    meuCarro.cor = "vermelho";
16    meuCarro.acelerar();
17    meuCarro.acelerar();
18    std::cout << "O meu carro " << meuCarro.cor << " anda a " << meuCarro.velocidade << " km/h\n";
19}

Quando roda, ele mostra: O meu carro vermelho anda a 20 km/h.

Juntar dados e ações desse jeito se chama programação orientada a objetos. Ela deixa programas enormes mais fáceis de entender, porque cada parte do programa cuida da sua própria vida. Um jogo com mil inimigos não precisa de mil cópias do código do inimigo, só de uma classe Inimigo e mil objetos.

Grande ideia 2: memória que se limpa sozinha

No C, se um programa pede memória, quem programa precisa lembrar de devolvê-la. Esqueça, e o programa vai comendo memória aos poucos. Devolva cedo demais e continue usando, e o programa pode travar ou, pior, virar uma falha de segurança.

O C++ trouxe uma solução esperta. Um objeto pode ter uma função especial de limpeza (chamada destrutor) que roda automaticamente quando o objeto não é mais necessário:

Memória que se limpa sozinha, C vs. C++. No C, você limpa à mão: pede memória com malloc, usa e precisa chamar free, com um comentário dizendo não esqueça. Esqueça o free e a memória vaza; libere cedo demais e o programa pode travar. No C++, a limpeza é automática: um std::vector de notas é criado dentro de chaves e, quando chega a chave de fechamento, a memória é devolvida, todas as vezes. Essa ideia tem um nome esquisito, RAII, aquisição de recurso é inicialização, mas é uma das melhores invenções do C++

Pense num quarto de hotel. No C, você precisa lembrar de fazer o check-out e devolver a chave. No C++, a chave volta sozinha para a recepção no momento em que você sai pela porta. A ideia tem um nome esquisito, RAII ("aquisição de recurso é inicialização"), mas funciona não só para memória, como também para arquivos, conexões de rede e qualquer outra coisa que precise ser fechada ou liberada.

Grande ideia 3: templates e uma grande caixa de ferramentas

A terceira grande novidade são os templates (modelos): um jeito de escrever uma receita que funciona para vários tipos de dados. Uma receita de ordenação escrita uma vez com templates consegue ordenar números, nomes, datas ou qualquer coisa que possa ser comparada.

O C++ usa templates para oferecer uma grande biblioteca padrão: listas prontas que crescem quando preciso, manipulação de texto, ordenação, busca, matemática e muito mais. Veja a mesma tarefinha, ordenar uma lista de nomes, em C e em C++:

Em C:

1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5int comparar_nomes(const void *primeiro, const void *segundo) {
6    return strcmp(*(const char **)primeiro, *(const char **)segundo);
7}
8
9int main(void) {
10    const char *nomes[] = {"Maria", "Ana", "Pedro", "Lucas"};
11    int quantidade = sizeof(nomes) / sizeof(nomes[0]);
12    qsort(nomes, quantidade, sizeof(nomes[0]), comparar_nomes);
13    for (int indice = 0; indice < quantidade; indice++) {
14        printf("%s\n", nomes[indice]);
15    }
16    return 0;
17}

Em C++:

1#include <algorithm>
2#include <iostream>
3#include <string>
4#include <vector>
5
6int main() {
7    std::vector<std::string> nomes = {"Maria", "Ana", "Pedro", "Lucas"};
8    std::sort(nomes.begin(), nomes.end());
9    for (const std::string& nome : nomes) {
10        std::cout << nome << "\n";
11    }
12}

Os dois mostram Ana, Lucas, Maria e Pedro, nessa ordem. Você não precisa entender cada símbolo; repare só que a versão em C precisa de uma função de comparação especial e de umas contas de tamanho cuidadosas, enquanto a versão em C++ simplesmente diz: aqui está uma lista de nomes, ordene.

Agora vem a parte surpreendente. Você poderia esperar que o código mais fácil fosse mais lento. Pelo contrário, muitas vezes ele é mais rápido. Ordenamos os mesmos 10 milhões de números com a ordenação pronta do C (qsort) e com a do C++ (std::sort):

Código mais fácil e também mais rápido. Ordenando os mesmos 10 milhões de números, medido para este artigo como a mediana de 5 execuções num notebook Windows. C com qsort: 1,59 segundo. C++ com std::sort: 0,71 segundo. Os dois compilados com GCC 14, com otimizações. A ordenação do C++ é um template, então o compilador monta uma versão feita só para números inteiros, enquanto o qsort do C precisa chamar uma função de comparação separada milhões de vezes

A versão do C++ terminou em menos da metade do tempo. Como o std::sort é um template, o compilador monta uma versão sob medida para números inteiros, com a comparação embutida. O qsort do C é uma única função genérica que precisa chamar uma função de comparação separada, de novo e de novo, milhões de vezes. Esse é o princípio do custo zero na prática: código de mais alto nível sem perder velocidade.

Onde o C++ está escondido

Como ele é rápido e bom para organizar programas muito grandes, o C++ aparece onde o software é ao mesmo tempo exigente e complexo:

Onde o C++ está escondido. Oito áreas. Videogames: grandes motores de jogos, como a Unreal Engine. Navegadores: Chrome, Edge e boa parte do Firefox. Motores de JavaScript: o V8 roda JavaScript no Chrome e no Node.js. Apps criativos: programas de foto, vídeo, música e 3D. Ferramentas de IA: os núcleos rápidos do TensorFlow e do PyTorch. Bancos de dados: como MySQL e MongoDB. Finanças: sistemas de negociação em que microssegundos contam. Carros e aviões: software em veículos e aeronaves
  • Videogames: a maioria dos grandes jogos e motores de jogos, como a Unreal Engine, é feita em C++, porque um jogo precisa desenhar uma imagem nova dezenas de vezes por segundo.
  • Navegadores: o Chrome e o Edge são feitos principalmente em C++, assim como boa parte do Firefox. O motor que roda JavaScript no Chrome (chamado V8) também é escrito em C++.
  • Software criativo: ferramentas profissionais de foto, vídeo, música e 3D dependem do C++ para lidar com arquivos enormes sem engasgar.
  • IA: mesmo quando as pessoas criam IA em Python, o trabalho pesado dentro de ferramentas como TensorFlow e PyTorch é feito por código em C++ por baixo.
  • Finanças, bancos de dados, carros e aviões: em qualquer lugar onde um atraso de um milionésimo de segundo, ou um travamento, custa caro.

Ainda evoluindo depois de mais de 40 anos

O C++ não parou no tempo. Um comitê internacional o atualiza com frequência e, desde 2011, sai uma versão nova mais ou menos a cada três anos:

Uma breve história do C++, numa linha do tempo. 1979: Bjarne Stroustrup começa o "C com Classes" no Bell Labs. 1983: ganha o nome C++. 1985: primeira versão comercial e livro. 1998: primeiro padrão oficial, o C++98. 2011: o C++11 moderniza a linguagem. 2017: C++17, com uma versão nova a cada 3 anos. 2020: o C++20 traz grandes novidades. 2024: sai o padrão C++23

A atualização de 2011, o C++11, foi tão grande que muitos programadores dizem que pareceu uma linguagem nova. Fala-se muito em "C++ moderno" para descrever o estilo mais novo, mais seguro e mais simples que essas atualizações tornaram possível.

Os pontos fracos

O C++ é poderoso, mas tem desvantagens de verdade:

  • Ele é enorme e complexo. Depois de mais de 40 anos de acréscimos, o C++ tem uma quantidade imensa de recursos e, muitas vezes, vários jeitos de fazer a mesma coisa. Até especialistas dizem que não conhecem tudo.
  • Ele ainda não tem segurança de memória. A limpeza automática ajuda muito, mas o C++ mantém a capacidade do C de mexer direto na memória e, com ela, o risco dos mesmos erros perigosos, como escrever além do fim de uma lista. E muito do código em C++ do mundo foi escrito em estilos antigos.
  • Demora para compilar e tem erros enigmáticos. Projetos grandes em C++ podem levar muito tempo para compilar, e as mensagens de erro, principalmente as que envolvem templates, são famosas por serem longas e confusas.

Por causa das preocupações com segurança, governos e empresas vêm incentivando linguagens com segurança de memória para projetos novos. Uma linguagem mais nova chamada Rust virou uma alternativa popular para alguns dos mesmos trabalhos, e a comunidade do C++ está trabalhando ativamente em jeitos de deixar o próprio C++ mais seguro.

O C++ e os vizinhos

  • C++ vs. C: o C é pequeno e simples; o C++ é o C mais classes, limpeza automática, templates e uma grande biblioteca. Os dois são rápidos. O C é comum em aparelhos minúsculos e no núcleo de sistemas operacionais; o C++, em aplicativos grandes, como jogos e navegadores.
  • C++ vs. C# e Java: essas linguagens copiaram a aparência do C++, mas cuidam da memória automaticamente com um coletor de lixo (garbage collector), um ajudante que de tempos em tempos limpa a memória que não está sendo usada. Isso é mais seguro e mais fácil, mas dá a quem programa menos controle sobre velocidade e tempo de resposta.
  • C++ vs. Python: o Python é muito mais fácil de aprender e escrever, mas bem mais lento para cálculos pesados. Os dois costumam trabalhar juntos: Python por fora, C++ fazendo o trabalho pesado por dentro.

Vale a pena aprender C++?

  • Bons motivos: você quer fazer jogos, trabalhar com navegadores ou ferramentas criativas, escrever software de alto desempenho ou entender de verdade como funciona um software rápido.
  • O que saber: a curva de aprendizado é íngreme. Muita gente começa por uma linguagem mais amigável e chega ao C++ depois, mas muitos programadores aprendem C++ primeiro e se dão muito bem.

Um pequeno glossário

  • C++: uma linguagem de programação criada por Bjarne Stroustrup, a partir de 1979, que amplia o C com classes, templates e mais.
  • Classe: uma planta que descreve quais dados um tipo de coisa guarda e o que ela sabe fazer.
  • Objeto: uma coisa de verdade construída a partir de uma classe, com os seus próprios dados.
  • Programação orientada a objetos: organizar um programa em torno de objetos que juntam dados e ações.
  • Destrutor: uma função especial que roda automaticamente quando um objeto não é mais necessário, para fazer a limpeza.
  • RAII: o costume do C++ de amarrar a limpeza ao tempo de vida de um objeto, para que os recursos sejam liberados automaticamente.
  • Template: uma receita que funciona para vários tipos de dados, completada pelo compilador.
  • Biblioteca padrão: a caixa de ferramentas pronta que vem com o C++: listas, textos, ordenação e mais.
  • Princípio do custo zero: você não paga por recursos que não usa, e os que usa são tão rápidos quanto código escrito à mão.
  • Coletor de lixo: um limpador automático de memória usado por linguagens como Java e C#, mas não pelo C++.
  • Compilador: o programa que traduz o código em C++ para código de máquina que o processador consegue rodar.

Concluindo

O C++ começou como "C com Classes" e virou uma das linguagens mais importantes da computação. Ele mantém a velocidade do C e a proximidade com a máquina, e acrescenta ferramentas para organizar programas enormes: classes para representar as coisas, limpeza automática para a memória se cuidar sozinha e templates que deixam código simples rodar impressionantemente rápido.

Esse poder vem com complexidade, e com alguns dos riscos do C. Mas, da próxima vez que um jogo rodar liso, uma página da web abrir num piscar de olhos ou um filtro de foto ser aplicado na hora, há uma boa chance de o C++ estar trabalhando nos bastidores.

Obrigado pela leitura!

Conhece alguém que vai gostar? Mande para essa pessoa.

Mais artigos

Read next

Comentários

Be kind and specific. Comments with links from new accounts appear after a moderator reviews them.