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
Libérer: 2024-11-18 11:21:02
original
493 Les gens l'ont consulté

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

Initialisation du tableau membre dans les constructeurs

Considérez la classe C suivante :

1

2

3

4

5

6

7

class C {

public:

    C() : arr({1, 2, 3}) {}

    // C() : arr{1, 2, 3} {}

private:

    int arr[3];

};

Copier après la connexion

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 :

1

2

3

4

5

6

7

8

9

10

11

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;

};

Copier après la connexion

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 :

1

2

3

4

5

6

class C {

public:

    C() : arr{1, 2, 3} {}

private:

    int arr[3];

};

Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal