2010-04-20 6 views
5

Cette question concerne la publication here. Est-il possible d'initialiser un tableau dans un appel de fonction ou un appel de constructeur? Par exemple, le constructeur de classe foo veut un tableau de taille 3, donc je veux appeler foo ({0, 0, 0}). J'ai essayé cela, et ça ne marche pas. J'aimerais pouvoir initialiser des objets de type foo dans les listes d'initialisation des constructeurs d'autres objets, ou initialiser foo's sans d'abord créer un tableau séparé. Est-ce possible?Initialisation de matrice C++ dans un appel de fonction ou un appel de constructeur

+0

D'abord vous parlez d'initialisation de tableau, alors vous devez soudainement initialiser un objet de classe. Alors, que devez-vous initialiser: un objet tableau ou un objet classe? – AnT

+0

L'initialisation d'une classe est un cas spécifique que j'ai utilisé comme exemple, et c'est la raison pour laquelle j'ai posé la question. Cependant, vous pourriez aussi avoir une fonction foo qui prend un tableau de taille 3 et que vous voulez appeler: foo ({0, 0, 0}). J'ai changé le PO pour le rendre plus évident. – david

+0

Oui, mais vous demandez toujours "Est-il possible d'initialiser un tableau sans l'assigner?". Eh bien, oui, c'est possible. Par exemple, 'int a [10] = {5}' initialise un tableau sans l'affecter, comme vous l'avez demandé. Pourtant, cela ne ressemble pas à ce qui vous intéresse vraiment. – AnT

Répondre

5

Non conforme à la norme actuelle. Il sera possible en C de 11

En gcc, vous pouvez utiliser un casting pour forcer la création d'un temporel, mais il est pas standard C++ (C99):

typedef int array[2]; 
void foo(array) {} // Note: the actual signature is: void foo(int *) 
int main() { 
    foo((array){ 1, 2 } ); 
} 
+0

Cela fonctionne dans C99, mais pas dans C++ 03 (ni dans C++ 0x - c'est un littéral composé). –

+0

Le code est OK avec (macports) gcc jusqu'à 4.6; gcc 4.7 signale 'erreur: prendre l'adresse du tableau temporaire'. –

+0

C++ 11 est la norme actuelle, cette réponse doit donc être mise à jour. –

0

Si elle est autorisée par votre conception , vous pouvez envisager d'encapsuler les données à l'intérieur d'une classe et par défaut initialiser le constructeur avec 0 (ou n'importe quelle valeur de votre choix)