Maison > développement back-end > C++ > De quelles modifications importantes dois-je être conscient lors de la migration du code vers C 11 ?

De quelles modifications importantes dois-je être conscient lors de la migration du code vers C 11 ?

Susan Sarandon
Libérer: 2024-12-24 17:19:28
original
481 Les gens l'ont consulté

What Breaking Changes Should I Be Aware Of When Migrating Code to C  11?

Modifications récentes dans C 11

C 11 a introduit des changements importants qui peuvent avoir un impact sur la compilation du code existant, notamment les suivants :

Langage de base

  • L'introduction de l'opérateur explicite bool() dans la bibliothèque standard, remplaçant les instances de l'opérateur void*(). Ce changement peut entraîner l'échec de la compilation du code qui reposait auparavant sur des conversions implicites.
  • Les nouveaux mots clés, notamment alignas, alignof, char16_t, constexpr et nullptr, peuvent entrer en conflit avec les identifiants existants dans le code qui ne suivait pas les conventions de dénomination. .
  • Le comportement de la division entière a changé, puisque C 11 arrondit toujours le résultat vers 0, tandis que C 03 permettait d'arrondir vers 0 ou l'infini négatif.
  • Les fonctions membres spéciales implicitement déclarées, telles que les constructeurs ou les destructeurs, sont désormais définies comme supprimées si leur définition implicite aurait été mal formée, ce qui peut entraîner l'utilisation de ces fonctions par le code dans certains les contextes deviennent invalides.
  • Les destructeurs déclarés par l'utilisateur ont une spécification d'exception implicite, ce qui signifie qu'ils ne peuvent pas lever d'exceptions. Le code qui repose sur des destructeurs lançant des exceptions devra peut-être être modifié.
  • Les appels dépendants de fonctions avec liaison interne sont désormais autorisés, ce qui peut modifier la résolution des fonctions surchargées dans les modèles.

Modifications de la bibliothèque

  • Identifiants ajoutés à la bibliothèque standard C dans C 11 peut entrer en conflit avec les identifiants existants dans le code qui utilisait des en-têtes portant les mêmes noms.
  • La fonction d'échange a été déplacée de l' en-tête vers le en-tête. Code qui inclut il faudra peut-être le mettre à jour pour inclure à la place.
  • L'espace de noms global posix est désormais réservé à la standardisation. Le code qui définit les identifiants dans cet espace de noms devra peut-être être modifié.
  • Les macros nommées override, final, carry_dependency ou noreturn ne sont pas valides en C 11. Le code qui définit ces macros devra peut-être être mis à jour.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal