2010-09-02 10 views
5

Quelle est la signification de la déclaration suivante:Quelle est la signification de char (et test (...)) [2]

char (& test(...))[2]; 

Je collé à l'intérieur d'un corps de fonction est et il compile tous droite. Je ne sais pas ce que je peux en faire mais ça passe la compilation.

J'ai rencontré quelque chose de similaire dans this réponse.

Répondre

3

C'est la déclaration d'une fonction prenant une liste d'arguments variable et retournant une référence à un tableau de 2 char.

Notez que si vous définissez une fonction comme celle-ci, les paramètres sont inaccessibles (via des moyens standard) car les macros <cstdarg> nécessitent une liste d'arguments variable pour suivre un paramètre nommé.

Si vous le souhaitez, vous pouvez définir une fonction avec cette déclaration et renvoyer une référence à la matrice appropriée. Vous pouvez l'appeler avec n'importe quel paramètre, sous réserve des restrictions pour les paramètres ... qui incluent les restrictions que le passage de types de classes non-POD entraîne un comportement indéfini.

E.g.

namespace 
{ 
    char samplearray[2]; 
} 

char (& test(...))[2] 
{ 
    return samplearray; 
} 
+0

Que fait un espace de noms anonyme dans le code ci-dessus? –

+0

Les variables définies dans un espace de noms anonyme ne peuvent pas être 'extern' en dehors du fichier où réside l'espace de noms. – Donotalo

1

déclarer essai en fonction vararg renvoyant une référence à un tableau de 2 char s

Un site utile pour les déclarations de dé-calandrage est cdecl: C gibberish <-> English (même si elle ne le fait pas comprendre varargs et est orienté C plutôt que C++).

+1

Wow c'est un site marrant. Je peux juste m'asseoir et frapper "rafraîchir" pendant des heures :) – FireAphis

+0

@FireAphis c'est quand vous savez qu'il est temps de demander de l'aide professionnelle; o) – Motti

Questions connexes