Maison >développement back-end >C++ >Les tableaux peuvent-ils être initialisés dans la liste d'initialisation des membres d'un constructeur ?

Les tableaux peuvent-ils être initialisés dans la liste d'initialisation des membres d'un constructeur ?

DDD
DDDoriginal
2024-11-18 11:21:02515parcourir

Can Arrays Be Initialized in a Constructor's Member Initializer List?

Initialisation du tableau membre dans les constructeurs

Considérez la classe C suivante :

class C {
public:
    C() : arr({1, 2, 3}) {}
    // C() : arr{1, 2, 3} {}
private:
    int arr[3];
};

Le code tente d'initialiser le arr membre du tableau dans la liste d'initialisation des membres du constructeur. Cependant, il ne parvient pas à se compiler.

Questions :

  1. Est-il possible d'initialiser un tableau dans la liste d'initialisation des membres d'un constructeur ?
  2. Que dit la norme C 03 à propos de cette situation ?
  3. L'initialisation de la liste C 11 résout-elle ce problème problème ?

Réponses :

1. Initialisation de tableau dans les constructeurs

Oui, il est possible d'initialiser un tableau dans la liste d'initialisation des membres d'un constructeur. Elle nécessite cependant une structure intermédiaire :

struct A {
    int foo[3];
    A(int a, int b, int c) : foo{a, b, c} {}
};

class C {
public:
    C() : foo(A(1, 2, 3)) {}
private:
    A foo;
};

2. Norme C 03

La norme C 03 ne traite pas explicitement de l'initialisation des tableaux dans les listes d'initialisation de membres. Cependant, les règles générales d'initialisation directe interdisent d'initialiser un tableau avec des accolades.

3. Initialisation de liste C 11

C 11 a introduit l'initialisation de liste, qui permet l'initialisation directe de tableaux à l'aide d'accolades :

class C {
public:
    C() : arr{1, 2, 3} {}
private:
    int arr[3];
};

Dans ce cas, la syntaxe utilisant des accolades directement après le nom du tableau est valide et initialise le tableau dans la liste d'initialisation des membres du constructeur.

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