En travaillant avec C , les développeurs sont peut-être tombés sur la syntaxe quelque peu déroutante qui permet de déclarer des variables avec des parenthèses. Des déclarations comme int (x) = 0; ou même int (((x))) = 0; peut laisser s'interroger sur leur utilité et leur praticité.
La réponse à cette énigme réside dans la notion de regroupement. Prenons l'exemple de la déclaration d'un pointeur vers une fonction de type f(int). L'approche standard, int *f(int);, est interprétée comme une fonction renvoyant int*. Cependant, pour spécifier correctement un pointeur vers cette fonction, des parenthèses doivent être introduites pour former int (*f)(int);.
Ce même principe s'applique également aux déclarations de tableau. La déclaration int *x[5]; désigne un tableau de cinq int*, alors que int (*x)[5]; pointe vers un tableau de cinq int.
Dans l'extrait de code fourni :
struct B { }; struct C { C (B *) {} void f () {}; }; int main() { B *y; C (y); // Oops, compiler error! }
L'intention est de construire un objet de type C qui effectuerait des opérations utiles dans son destructeur. Cependant, le compilateur interprète mal C (y) ; comme déclaration d'une variable y de type C, entraînant une erreur de redéfinition. C’est là qu’intervient le regroupement entre parenthèses. En entourant l'appel du constructeur sous la forme C (y) au lieu de C(y), l'interprétation du compilateur est corrigée, permettant au code de se compiler comme prévu.
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!