Partage de technologie

Introduction aux nouvelles fonctionnalités de C 11-Part 2

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

11. Déduction automatique

(1) Dérivation automatique de type automatique
auto déduire automatiquement le type de la variable
auto ne représente pas un type réel, c'est juste un espace réservé pour une déclaration de type
Auto n'est pas omnipotent et peut être déduit dans n'importe quel scénario. Les variables déclarées à l'aide de auto doivent être initialisées pour permettre au compilateur de déduire son type réel et de convertir auto en type réel au moment de la compilation.
Lorsque la variable n'est pas un pointeur ou une référence, le résultat de la dérivation ne conservera pas les mots-clés const et volatile ; lorsque la variable est un pointeur ou une référence, le résultat de la dérivation conservera les mots-clés const et volatile.
Scénarios dans lesquels auto ne peut pas être utilisé :
1.auto ne peut pas être utilisé comme paramètre de fonction, car utiliser auto comme paramètre formel équivaut à ne pas initialiser la variable, et auto ne peut pas être exporté ;
2. Il ne peut pas être utilisé pour initialiser des variables membres non statiques d'une classe, car les variables membres non statiques appartiennent à des objets et le type de l'objet n'est pas connu jusqu'à sa création ;
3. Vous ne pouvez pas utiliser le mot-clé auto pour définir un tableau ;
4. Vous ne pouvez pas utiliser auto pour dériver les paramètres du modèle ;
Scénarios d'utilisation recommandés pour l'automobile :
1. Utilisé pour traverser les conteneurs STL ;
2. Utilisé pour la programmation générique ;
(2) dérivation de type décltype
Parfois, vous n'avez pas besoin ou ne pouvez pas définir de variables, mais vous souhaitez obtenir un certain type. Vous pouvez utiliser decltype pour déduire le type d'une expression lors de la compilation, par exemple : int x=18; ;C'est-à-dire déduire le type de a passant par x
Règles de dérivation :
1. L'expression est une variable ordinaire, une expression ordinaire ou une expression de classe temporelle, et le type déduit à l'aide de decltype est cohérent avec le type de l'expression ;
2. L'expression est une fonction, et le type déduit à l'aide de decltype est cohérent avec la valeur de retour de la fonction (si la valeur de retour est modifiée avec des qualificatifs const, volatiles, les qualificatifs sont ignorés) ;
3. L'expression est une lvalue ou enveloppée dans (), et decltype est utilisé pour déduire une référence au type d'expression (si la valeur de retour est modifiée avec des qualificatifs const ou volatile, les qualificatifs sont ignorés) ;
Scénarios d'application de decltype :
1. Principalement utilisé en programmation générique, car il existe un grand nombre de types incertains en programmation générique ;

12.utilisation finale

final est utilisé pour empêcher qu'une certaine classe soit héritée ou qu'une certaine fonction virtuelle soit remplacée.
Lorsque final modifie une fonction, vous ne pouvez modifier que les fonctions virtuelles et le mot-clé final doit être placé après la classe ou la fonction. Lorsqu'une fonction virtuelle est modifiée avec final, cela peut empêcher la sous-classe de remplacer la fonction virtuelle de la classe parent.
Lorsque final modifie une classe, écrivez final après le nom de la classe, ce qui signifie que cette classe ne peut plus être héritée, c'est-à-dire que cette classe n'a plus de classes dérivées.

13.en utilisant

Rôle précoce : utilisé pour déclarer les espaces de noms. L'utilisation d'espaces de noms peut empêcher les conflits de noms ; les sous-classes utilisateur appellent des méthodes avec le même nom que la classe parent masquée ;
Nouvelle fonction : définissez un alias d'un type. Notez que using ne donne en fait qu'un alias au type d'origine, plutôt que de définir un nouveau type. Comment utiliser : using new type = old type, tel que : using my_int = int ;
Utiliser using au lieu de typedef pour définir des pointeurs de fonction rend le code plus facile à lire. Au début, typedef était utilisé pour définir des pointeurs de fonction, tels que : typedef int (.func)(int, string);Utilisez plutôt using definition : using func = int()(int, chaîne);
Using peut spécifier des alias pour les modèles, mais typedef ne le peut pas

14. Support à angle droit

Les premiers compilateurs C interprétaient deux crochets droits comme des opérateurs de décalage vers la droite
Parmi les nouvelles fonctionnalités, les règles d'analyse du compilateur ont été améliorées pour analyser autant que possible plusieurs crochets droits dans les terminateurs de paramètres de modèle.

15. utilisation prioritaire

Le remplacement est utilisé pour garantir que la fonction à remplacer dans la classe dérivée a la même signature que la fonction virtuelle correspondante de la classe de base, et indique également clairement que la fonction de la classe de base sera remplacée.
Override est écrit après la fonction, indiquant explicitement que la fonction est remplacée, et le compilateur vérifiera le type de la fonction et la fonction virtuelle de la classe parent.

16. Postfix de type de valeur de retour

Écrivez le type de valeur de retour de la fonction après le corps de la déclaration de la fonction, auto func (paramètre 1, paramètre 2,...) -