El código C es normalmente un código C ++ válido.
Los principales problemas con C ++ lo están usando incorrectamente ( Linus Torvalds lo odia por esta razón , también tuvo otros problemas con la portabilidad de la biblioteca y, por lo tanto, está trabajando a nivel de sistemas operativos y tiene que poder ejecutar cosas de forma aleatoria chip por ahí).
Por ejemplo, casi no hay ventaja en usar una matriz cstyle [] sobre un c ++ std :: vector <> (o contenedor similar).
Los vectores son seguros para los tipos y se pueden verificar los límites (puede acceder a los elementos usando get () o [], incluso si no utiliza el método de matriz comprobada, aún puede consultar el tamaño en lugar de cargarlo con el puntero).
Pero los vectores pueden ser más lentos si, por ejemplo, no declara el tamaño predeterminado en el constructor. También agregar cosas a un vector puede causar ralentizaciones si luego necesita un cambio de tamaño. C ++ 11 también agrega muchas ventajas, como la inicialización uniforme (ahora puede declarar e inicializar vectores usando la misma sintaxis) y hay constructores de movimiento que pueden permitirle evitar la copia. Incluso puede hacer sus propios inicializadores personalizados (si quisiera hacer algo más que usar malloc por alguna razón).
O, por supuesto, si necesita cambiar el tamaño de las cosas, entonces los vectores son aún más fáciles de hacer, no tiene que perder el tiempo con malloc, copiar manualmente las cosas, etc.
C ++ le proporciona código orientado a objetos. Cuando se compila, será igual de eficiente, ya que en realidad es solo una abstracción para los humanos que trabajan con el código. Aunque cosas como los constructores pueden ralentizar la creación de objetos. Pero necesitará que el constructor establezca los valores predeterminados o, de lo contrario, puede inicializar objetos sin usar el constructor (dejando de lado los ()).
Pero la orientación a objetos hace que programar juegos sea mucho más fácil. Los juegos a menudo tratan con objetos.