P
prepair.app
Começar entrevista →
EnglishУкраїнськаРусскийDeutsch
🔷

Middle C++Perguntas de entrevista C++

Middle · 2–4 anos de experiência

As entrevistas de C++ avaliam três coisas: se você entende o modelo de objetos, se pode ser confiável no gerenciamento de memória, e se sabe o que a biblioteca padrão realmente custa. Aqui estão as perguntas mais frequentes, cada uma com uma resposta modelo. Middle: compreensão mais profunda, otimização e situações reais de trabalho.

Experimente — sem necessidade de conta
Preparando sua pergunta…

Temas para se preparar

Memória, ponteiros e RAII
OOP, funções virtuais e vtable
Move semantics e a regra dos cinco
Templates e metaprogramação
Contêineres STL e complexidade
Concorrência e data races

6 perguntas de nível Middle com respostas

1

O que é a regra dos cinco, e o que o compilador gera para você?

Resposta

Se uma classe precisa de um destrutor, construtor de cópia ou atribuição de cópia personalizados, quase certamente precisa dos cinco mais o construtor de movimento e a atribuição de movimento — porque ela possui um recurso. O compilador os gera implicitamente, mas declarar qualquer um deles suprime alguns dos outros: escrever um destrutor para a geração das operações de movimento, e as cópias silenciosamente tomam o lugar delas. A regra dos zero é ainda melhor — possuir recursos através de membros que já se gerenciam sozinhos.

2

O que `std::move` realmente faz?

Resposta

Nada em tempo de execução. É um cast incondicional para uma referência rvalue, que muda a resolução de sobrecarga para que um construtor ou atribuição de movimento possa ser selecionado. Se o tipo não tem operações de movimento, a cópia é escolhida e o código continua copiando silenciosamente. Depois de um move, a origem fica válida mas não especificada — você pode atribuir a ela ou destruí-la, mas não assumir seu conteúdo.

3

O que é copy elision e RVO?

Resposta

O compilador construindo um objeto retornado diretamente no armazenamento de quem chamou em vez de construí-lo e depois copiar ou mover. RVO nomeado e sem nome foram otimizações antigas que podiam eliminar efeitos colaterais observáveis; desde o C++17 a elision é obrigatória ao retornar um prvalue. A consequência prática é que retornar por valor não é a pessimização que as pessoas continuam assumindo, e return std::move(x) geralmente piora as coisas ao bloquear o NRVO.

4

Quando os iteradores são invalidados?

Resposta

Depende do contêiner e vale a pena saber com exatidão. vector invalida tudo ao realocar e tudo a partir do ponto de erase em diante; deque invalida todos os iteradores ao inserir no meio; list e os contêineres associativos mantêm os iteradores válidos exceto o do elemento removido. O bug clássico é fazer erase dentro de um loop, por isso erase retorna o próximo iterador válido e por isso existe o idiom erase-remove.

5

`std::map` vs `std::unordered_map` — como você escolhe?

Resposta

map é uma árvore balanceada: iteração ordenada, busca O(log n), iteradores estáveis, previsível. unordered_map é uma tabela hash: O(1) em média mas O(n) no pior caso, sem ordem, o rehashing invalida iteradores, e depende da qualidade do hash. Escolha map quando precisar de ordem ou de um pior caso limitado, unordered_map quando as buscas dominam e a ordem não importa.

6

Quais são as garantias de segurança contra exceções?

Resposta

Quatro níveis: no-throw, forte (a operação se completa ou deixa o estado inalterado), básica (os invariantes se mantêm e nada vaza, mas o estado pode ter mudado), e nenhuma. A garantia forte geralmente é implementada fazendo o trabalho numa cópia e trocando no final. Destrutores não devem lançar — durante o desenrolamento da stack uma segunda exceção chama std::terminate, por isso destrutores são noexcept por padrão.

🦎

Só ler as respostas não basta

Numa entrevista de verdade você fala sob pressão. O Cam faz essas mesmas perguntas, avalia cada resposta e mostra exatamente o que melhorar.

Praticar entrevista de Middle C++ →
Grátis · 3 entrevistas por mês

Outros níveis — C++

Junior C++Senior C++Todas as perguntas de C++

Outras especializações

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🦫Middle Go Backend🟢Middle Node.js Backend💎Middle Ruby on Rails🟨Middle JavaScript⚛️Middle React Frontend