Comment initialiser un membre d'un tableau dans une liste d'initialisation de membres
Introduction
Initialisation d'un Un membre d'un tableau dans une liste d'initialisation de membres peut sembler une tâche simple, mais peut être difficile en pratique. Cet article explorera différentes approches et répondra aux questions courantes liées à ce sujet.
Problème et code
L'extrait de code suivant tente d'initialiser un membre du tableau dans l'initialiseur d'un constructeur. list :
class C { public: C() : arr({1,2,3}) //doesn't compile {} private: int arr[3]; };
Cependant, le code ne parvient pas à se compiler. La raison en est que les tableaux ne peuvent être initialisés qu'à l'aide de l'opérateur d'affectation =, tel que :
int arr[3] = {1,3,4};
Solutions
Une solution consiste à utiliser une structure pour encapsuler le tableau, lui permettant d'être initialisé dans le constructeur. C'est essentiellement ce que fait la bibliothèque Boost.Array.
C 11 introduit l'initialisation de liste, qui peut être utilisée pour initialiser un tableau dans une liste d'initialisation de membres. Le code suivant fonctionnerait :
class C { public: C() : arr{1, 2, 3} { } private: int arr[3]; };
C 03
La norme C 03 ne traite pas spécifiquement de l'initialisation des agrégats (y compris les tableaux) dans les initialiseurs de constructeur. L'invalidité du code original est une conséquence des règles d'initialisation directe, qui interdisent l'utilisation de listes d'initialisation pour les tableaux.
C 11
Initialisation de la liste de C 11 La syntaxe simplifie l'initialisation des tableaux dans les listes d'initialisation de membres. Cependant, il est important d'utiliser la syntaxe correcte, comme indiqué ci-dessus.
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!