Clarifier la distinction entre (type)value et type(value)
En C , les expressions (type)value et type(value ) peut sembler interchangeable, mais il existe une différence subtile à prendre en compte. Plus précisément, l'opérateur (type) peut être utilisé pour convertir une valeur en type spécifié, alors que type(value) est équivalent à un appel de constructeur uniquement lorsqu'une liste de valeurs est fournie.
Selon la norme C, un spécificateur de type simple (type) suivi d'une liste d'expressions entre parenthèses crée une valeur du type spécifié en fonction de la liste d'expressions donnée. S'il n'y a qu'une seule expression, (type)value et type(value) fonctionnent comme des expressions cast.
Cependant, une liste de valeurs séparées par des virgules dans l'expression introduit une distinction. Dans ce cas, type(value) devient équivalent à un appel de constructeur. Une variable temporaire est implicitement déclarée et l'expression initialise effectivement cette variable en utilisant les valeurs fournies. Le résultat est la rvalue de la variable temporaire.
Bien que la plupart des types puissent être utilisés de manière interchangeable sous les formes (type)valeur et type(valeur), certains noms de types peuvent ne pas fonctionner pour cette dernière syntaxe. Par exemple, l'utilisation du nom de type char * dans type(value) entraînera une erreur de compilation, alors que (type)value fonctionne correctement. Dans de tels cas, l'utilisation d'un typedef pour définir un nom de type alternatif peut permettre l'utilisation de la syntaxe type(value).
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!