Bonjour après avoir épluché la FAQ C++ quelques questions subsistent encore dans mon esprit. Si quelqu'un possède la capacité d'y répondre, je lui en serais reconnaissant.

1) Concernant les exceptions en C++, j'ai lu et j'admets qu'il est plus facile pour un développeur de gérer les erreurs dans son programme. Cependant, j'ai aussi lu qu'un bloc "try-catch" était "lourd" à gérer et ralentissais le programme.
- Dans ce cas, peut-on considérer qu'une gestion des erreurs comme on le ferait en C (avec tout un tas de "return") serait plus optimal qu'un "trow" ?
- Ne gâche-t-on pas la puissance de C++ en n'utilisant pas les exceptions ?
- Dans quels cas serait-il favorable d'utiliser "return" ou "throw" ?

2) J'ai lu qu'on utilisait les classes abstraites pour factoriser les opérations sur une classe et les interfaces pour les définir. Cependant, a-t-on réellement besoins d'utiliser des interfaces ?
J'admets qu'il est peut-être utile d'en utiliser dans le cas où un projet devrait être repris par plusieurs développeurs et qu'il avait une grande envergure, mais je ne comprends pas ce que cela apporte de plus que de lire le ".h" d'une classe par exemple hormis le fait qu'on ne puisse en hériter sans implémenter chacune des méthodes définies.
N'est-ce pas plus lourds en terme de performance d'utiliser une classe qui hérite d'une classe abstraite héritant elle-même d'une interface plutôt qu'une classe héritant uniquement d'une classe abstraite ?

3) Après avoir développé en C++, je me suis rendu compte qu'il serait possible d'utiliser un "faux concept d'objet" en C. Par exemple créer des structures contenant des pointeurs sur fonctions en guise de méthodes et ainsi regrouper des fonctionnalités.
Cela affecte-t-il les performances ?
Cela ne va-t-il pas à l'encontre du développement en C qui se voudrait uniquement procédurale ?

4) En C++, lorsque l'on utilise du polymorphisme et que l'on désire stocker ses classes dans une seule "List".
Exemple :
- une classe "Humain".
- une classe "Soldat" héritant "d'Humain".
- une classe "Marchand" héritant "d'Humain".
On désire simplement utiliser une "List<Humain*>".
Vient alors le besoin d'extraire ces classes et de déterminer de quels types elles sont. En PHP on utiliserait "instanceof" pour cela.
En C++, j'ai trouvé plusieurs solutions :
- Utiliser "typeid"
- Utiliser un "dynamic_cast" (problèmes de performance ?)
- Stocker un id dans la classe Humain sous forme "d'enum" de manière à connaitre le type et faire appel à un "static_cast" (limite d'utilisation avec héritage multiple ?)
- Quelle est parmi ces 3 solutions, celle qui est la plus performante ?
- Existe-t-il une solution plus adaptées ?

5) Et enfin dernière question, de manière générale, un code en C++ sera-t-il forcément plus lent à exécuter qu'un code en C ?
Je serai du genre à penser qu'un bon code en C++ surpassera un mauvais code en C et vice et versa, cependant je me pose la question, lorsque l'objectif est la "performance absolue" pour le développement d'un serveur que vaut-il mieux choisir entre C++ et C (ne me répondez pas l'ASM ) ?

Merci d'avance à ceux qui prendront le temps de lire et de répondre à ce message.