Il y a quelques années, je pensais que C était absolument pur comparé à C++ parce que le compilateur ne pouvait pas générer de code que vous ne pouviez pas prédire. Je crois maintenant que les contre-exemples incluent les barrières de mot-clé et de mémoire volatile
(dans la programmation multiprocesseur ou les pilotes de périphériques pour les périphériques matériels mappés en mémoire, où le langage assembleur serait encore plus pur que les optimisations d'un compilateur C). En ce moment j'essaye d'énumérer les choses imprévisibles qu'un compilateur C++ peut faire. La principale plainte qui me vient à l'esprit à propos de C++ est que le compilateur instancie implicitement les objets temporaires, mais je pense que ces cas peuvent tous être attendus. Les cas je pense sont:Comment créer accidentellement des objets temporaires en C++?
- lorsqu'une classe définit un constructeur de copie pour un type autre que lui-même, sans utiliser le
explicit
mot-clé - lorsqu'une classe définit un opérateur de conversion surchargé:
operator()
- lorsqu'une fonction accepte un objet en valeur plutôt que par référence
- lorsqu'une fonction retourne un objet par valeur plutôt que par référence
sont la re les autres?
+1: intéressant en ce qui concerne les systèmes embarqués. – jldupont
Ils sont tous définis dans la norme et peuvent donc être prédits - ceux qui ne peuvent être prédits sont des comportements indéfinis – Mark
En C, vous avez des conversions implicites (cast), donc je ne dirais pas que c'est "pure". – Manuel