Comprendre les nuances de (type)value et type(value) en C
En C, deux syntaxes différentes existent pour la conversion de type explicite : (type)valeur et type(valeur). Cette distinction soulève la question : quelles sont les différences, le cas échéant, entre ces deux expressions ?
Aucune différence en simple casting
Selon la norme C (section 5.2 .3), lorsqu'un simple spécificateur de type est suivi d'une seule expression entre parenthèses, l'expression résultante crée une valeur du type spécifié à partir de l'expression donnée.
Équivalence de la valeur (type) et type(value)
Pour une seule expression, (type)value est équivalent à type(value) à la fois dans la définition et dans le sens. Cela signifie qu'il n'y a absolument aucune différence entre ces deux expressions lors de la conversion d'une valeur unique en un type spécifié.
Différence avec plusieurs valeurs
Cependant, une différence subtile apparaît lors de la conversion d'une liste de valeurs séparées par des virgules. Dans ce cas, si le type spécifié est une classe avec un constructeur correctement déclaré, alors type(x1, x2, ...) équivaut à créer une variable temporaire t de type T avec les valeurs données et à attribuer la valeur de t à l'expression.
Restrictions relatives aux noms de types
En guise de remarque supplémentaire, il existe certains noms de types pour lesquels la syntaxe type(value) ne peut pas être utilisée. Par exemple, alors que (char )string est valide, char (string) échouera à la compilation. Cependant, si le type est alias à l'aide de typedef, la syntaxe type(value) peut être utilisée avec le nom d'alias.
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!