Maison >développement back-end >C++ >Quelles modifications radicales C 11 a-t-il apportées au code existant ?

Quelles modifications radicales C 11 a-t-il apportées au code existant ?

DDD
DDDoriginal
2024-12-12 22:12:12749parcourir

What Breaking Changes Did C  11 Introduce to Existing Code?

Modifications révolutionnaires introduites dans C 11

C 11 introduit plusieurs modifications révolutionnaires qui peuvent affecter la compilation et le comportement du code existant.

Langue de base Modifications :

  • Surcharge d'opérateur : L'introduction d'un opérateur explicite bool() dans la bibliothèque standard a remplacé les anciennes instances de l'opérateur void*(). Ce changement peut casser le code qui reposait auparavant sur des conversions implicites en valeurs booléennes.
  • Ajouts de mots clés : De nouveaux mots clés, tels que alignas, constexpr et nullptr, peuvent désormais être utilisés et peuvent entrer en conflit avec identifiants précédemment valides.
  • Litéraux entiers : Certains littéraux entiers peuvent changez le type d'entier non signé en long long signé, ce qui entraîne des erreurs potentielles dans les calculs.
  • Arrondi de division : La division entière arrondit désormais toujours vers 0, quelle que soit l'utilisation de types à virgule flottante.
  • Définitions de constructeurs implicites : Certaines définitions de constructeurs implicites sont maintenant supprimées, créant ainsi un code précédemment valide qui les appelle invalide.
  • Spécifications d'exception implicites : Les destructeurs déclarés par l'utilisateur ont désormais une spécification d'exception implicite, qui peut affecter le comportement de gestion des exceptions.
  • Appels de fonctions dépendantes : Les appels de fonctions dépendants avec liaison interne sont désormais autorisés, modifiant la résolution des appels de fonction dans certains scénarios.

Modifications de la bibliothèque :

  • Conflits d'en-têtes : Les nouveaux en-têtes de bibliothèque standard peuvent entrer en conflit avec les en-têtes existants portant des noms similaires , tel que et .
  • Espace de noms réservé : L'espace de noms global posix est désormais réservé à la standardisation, ce qui soulève des problèmes pour le code qui définissait auparavant des identifiants dans cet espace de noms.
  • Conflits de macros : Les macros définies pour override, final, carry_dependency et noreturn sont désormais invalides dans C 11, affectant potentiellement le code qui utilise ces macros.

Il est important de noter que même si ces changements sont importants, beaucoup sont intentionnels et visent à améliorer la solidité et la cohérence du langage. Les programmeurs doivent revoir entièrement leur base de code, identifier les modifications importantes potentielles et apporter les modifications appropriées pour garantir la compatibilité avec C 11.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn