O código C é normalmente um código C ++ válido.
Os principais problemas do C ++ são usá-lo incorretamente ( Linus Torvalds o odeia por esse motivo , ele também teve outros problemas com a portabilidade de bibliotecas e, por isso, compra ele está trabalhando no nível de sistemas operacionais e deve ser capaz de executar as coisas de forma aleatória chip lá fora).
Por exemplo, quase não há vantagem em usar uma matriz cstyle [] em vez de um c ++ std :: vector <> (ou recipiente semelhante).
Os vetores são tipicamente seguros e podem ser verificados dentro dos limites (você pode acessar os elementos usando get () ou [], mesmo se você não usar o método de matriz marcada, ainda poderá consultar o tamanho em vez de carregá-lo com o ponteiro.
Mas os vetores podem ser mais lentos se, por exemplo, você não declarar o tamanho padrão no construtor. A adição de itens a um vetor pode causar lentidão se for necessário redimensionar. O C ++ 11 também oferece muitas vantagens, como inicialização uniforme (agora você pode declarar e inicializar vetores usando a mesma sintaxe) e existem construtores de movimentação que permitem evitar a cópia. Você pode até criar seus próprios inicializadores personalizados (se quiser fazer algo diferente de usar o malloc por algum motivo).
Ou, é claro, se você precisar redimensionar as coisas, os vetores ainda serão mais fáceis de fazer, você não precisará mexer com o malloc, copiar manualmente as coisas e assim por diante.
C ++ fornece código orientado a objeto. Quando compilado, será igualmente eficiente, pois é apenas uma abstração para os humanos que trabalham com o código. Embora coisas como construtores possam retardar a criação de objetos. Mas você precisará do construtor para definir os valores padrão ou poderá inicializar objetos sem usar o construtor (deixando de fora os ()).
Mas a orientação a objetos facilita muito a programação de jogos . Os jogos costumam lidar com objetos.