Que font les suivants? Je pensais que + était uniquement pour la promotion des nombres entiers.
char c[20] = "hello";
foo(+c);
foo(+"hello");
Que font les suivants? Je pensais que + était uniquement pour la promotion des nombres entiers.
char c[20] = "hello";
foo(+c);
foo(+"hello");
Il oblige le tableau à la désintégration d'un pointeur, comme indirectement indiqué au §5.3.1 [expr.unaire.op]/7:
L'opérande de l'unaire + opérateur aura l'arithmétique, non délimité énumération, ou de type pointeur et l' le résultat est la valeur de l'argument. Promotion intégrale est effectuée sur l'intégrale ou énumération des opérandes. Le type du résultat est le type de la promotion opérande.
Vous pourriez ne pas le voir au début, mais depuis un tableau n'est pas l'un des types énumérés, il doit être converti en un pointeur afin de s'adapter. À partir de là, la valeur du pointeur est retourné.
Dans les deux cas, un foo(const char *)
serait choisi plus d'un foo(const char(&)[N])
. Pour quelques exemples de choses utiles que vous pouvez utiliser unaire plus pour, voir cette réponse. Inclus sont la conversion d'un type enum d'un entier et d'obtenir autour de la liaison question. Comme vous le dites, il peut également être utilisé pour la promotion intégrale. Par exemple, unsigned char byte = getByte(); std::cout << +byte;
imprime la valeur numérique et jamais le personnage.
Unary +
n'est pas défini uniquement pour les types numériques, mais également pour les types de pointeur. Cependant, il n'est pas défini pour les tableaux.
Ainsi, foo(+c)
force c
à être converti en un pointeur sur son premier élément. Si foo
est une fonction définie comme prenant un char *
, cela ne serait pas nécessaire: cela se produirait déjà implicitement. Cela peut toutefois être important en cas de surcharge (éventuellement via une fonction de modèle).
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.