Maison > développement back-end > C++ > De quels changements radicaux dois-je être conscient lors de la migration vers C 11 ?

De quels changements radicaux dois-je être conscient lors de la migration vers C 11 ?

Susan Sarandon
Libérer: 2024-12-23 16:41:16
original
688 Les gens l'ont consulté

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

Quelles modifications radicales sont introduites dans C 11 ?

L'un des changements importants introduits dans C 11 est l'opérateur explicite bool() dans la bibliothèque standard, remplaçant les instances de l'opérateur void*(). Bien que ce changement doive résoudre un code invalide, il existe d'autres modifications potentielles à prendre en compte.

Incompatibilités du langage de base

  • Interprétation des littéraux de chaîne modifiés : Les macros prédéfinies comme "u8" peuvent modifier la chaîne littéraux.
  • Littéraux de chaîne définis par l'utilisateur : "_x" dans les littéraux de chaîne crée désormais des littéraux de chaîne définis par l'utilisateur, au lieu de développer des macros.
  • Nouveaux mots clés : Les mots-clés introduits comme "constexpr" et "thread_local" peuvent casser l'identifiant existant noms.
  • Modifications littérales entières : Les littéraux entiers dépassant la plage de « long » peuvent désormais devenir « long long ».
  • Modifications de division entière : Le comportement d'arrondi des divisions entières de C 03 peut différer de l'arrondi de C 11 vers 0.
  • "auto" comme spécificateur de stockage : Le code C 03 utilisant "auto" comme spécificateur de stockage peut devenir invalide.
  • Conversions restreintes : Les conversions restrictives C 03 (par exemple, double en int) peuvent désormais être invalide.
  • Suppressions implicites de fonctions membres spéciales : Les fonctions membres mal formées, implicitement définies, sont automatiquement supprimées.
  • Spécifications des exceptions de destructeur : Utilisateur- les destructeurs déclarés ont désormais un nosauf implicite (true) spécifications.
  • Élimination de la déclaration "export" : Les déclarations C 03 utilisant "export" sont désormais invalides.
  • Modification de clôture du modèle : "> >" dans les modèles peut désormais fermer deux modèles au lieu d'être considéré uniquement comme un opérateur de décalage.
  • Appels dépendants de fonctions de liaison internes : Les appels dépendants de fonctions de liaison internes sont désormais autorisés.

Bibliothèque Modifications

  • Identifiants avec espace de noms : Les identifiants ajoutés à la bibliothèque standard peuvent casser le code existant.
  • L'en-tête comprend : En-têtes précédemment situé dans certains en-têtes standards (par exemple, , ) a peut-être été déplacé ailleurs.
  • Espace de noms "posix" : L'espace de noms "posix" est désormais réservé pour une standardisation future.
  • Définitions des macros : Définir "override", "final", "carries_dependency" ou "noreturn" comme les macros le peuvent désormais être invalide.

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