Quelle est la différence entre
(type)value
et
type(value)
en C ++?
Quelle est la différence entre
(type)value
et
type(value)
en C ++?
Il n'y a pas de différence.
Edit: Depuis que quelqu'un downvoted ce, je vais citer la norme (§5.2.3).
Un type simple spécificateur (7.1.5), suivie par une mise entre parenthèses de l'expression-la liste des constructions d'une valeur du type spécifié compte tenu de l'expression de la liste. Si la liste d'expression est une expression unique, la conversion de type de l'expression est l'équivalent (en definedness, et si elles sont définies dans la signification de l'correspondant fonte d'expression (5.4).
Depuis que la question précisé la différence entre type(value)
et (type)value
, il n'y a absolument aucune différence.
Si et seulement si vous avez affaire à un comma-separated liste de valeurs peut-il y avoir une différence. Dans ce cas:
Si l'expression liste indique plus d'une seule valeur, le type est une classe avec un personnel dûment déclaré constructeur (8.5, 12.1), et l'expression de T(x1, x2, ...) est l'équivalent en effet à la déclaration T t(x1, x2, ...); pour certains inventé temporaire de la variable t, le résultat étant la valeur de t comme une rvalue.
Edit: Comme Troubadour a souligné, il y a certains noms de types pour lesquels l' type(value)
version n'est tout simplement pas compiler. Par exemple:
char *a = (char *)string;
compiler, mais:
char *a = char *(string);
ne sera pas. Le même type avec un nom différent (par exemple, créé avec un typedef
) peut fonctionner si:
typedef char *char_ptr;
char *a = char_ptr(string);
Il n'y a pas de différence quand les deux sont des moulages, mais parfois ce "de type(valeur)" n'est pas un casting.
Voici un exemple de projet de norme N3242, la section 8.2.1:
struct S
{
S(int);
};
void foo(double a)
{
S w( int(a) ); // function declaration
S y( (int)a ); // object declaration
}
Dans ce cas, 'int(a)' n'est pas un casting parce que " a " n'est pas une valeur, c'est un nom de paramètre entouré par redondants entre parenthèses. Le document précise
L'ambiguïté résultant de la similitude entre une fonction de style exprimées et à la déclaration mentionnée à l'6.8 peut également se produire dans le contexte d'une déclaration. Dans ce contexte, le choix est entre une fonction déclaration avec un ensemble redondant de parenthèses autour d'un paramètre nom et une déclaration d'objet avec une fonction de style de fonte que l' initialiseur. Tout comme pour les ambiguïtés relevées dans 6.8, la la résolution est de considérer toute construction qui pourrait être un déclaration une déclaration.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.