94 votes

Que fait l'opérateur unaire plus?

Que fait l'opérateur unaire plus? J'ai trouvé plusieurs définitions ( ici et ici ), mais je n'ai toujours aucune idée de son utilité. On dirait que ça ne fait rien, mais il y a une raison, non?

131voto

Charles Salvia Points 28661

En fait, unaire plus ne faire quelque chose - même en C. Il effectue l' habitude de l'arithmétique des conversions sur l'opérande et retourne une nouvelle valeur, qui peut être un nombre entier d'une plus grande largeur. Si la valeur d'origine est un entier non signé de moindre largeur qu' int, il sera changé en signed de la valeur.

Généralement ce n'est pas si important que cela, mais il peut avoir un effet, donc c'est pas une bonne idée d'utiliser unaire plus comme une sorte de "commentaire" indiquant qu'un nombre entier est positif. Considérez les points suivants programme en C++:

void foo(unsigned short x)
{
 std::cout << "x is an unsigned short" << std::endl;
}

void foo(int x)
{
 std::cout << "x is an int" << std::endl;
}

int main()
{
 unsigned short x = 5;
 foo(+x);
}

Cela va afficher "x est un entier (int)".

Donc dans cet exemple unaire plus a créé une nouvelle valeur à un type différent et de ce paramètre.

63voto

Jeffrey Hantin Points 19272

Il est là pour être surchargé si vous vous sentez le besoin; pour tous les types prédéfinis, il s'agit essentiellement d'un no-op.

Les utilisations pratiques de no-op unaire les opérateurs arithmétiques sont assez limitées, et ont tendance à concerner les conséquences de l'utilisation d'une valeur dans une expression arithmétique, plutôt que l'opérateur lui-même. Par exemple, il peut être utilisé pour forcer l'élargissement de la plus petite partie intégrante types d' int, ou de s'assurer qu'une expression du résultat est traité comme une rvalue et donc pas compatible avec un non-const paramètre de référence. Je pense, toutefois, que ces utilisations sont mieux adaptés à la code de golf de lisibilité. :-)

44voto

Claudiu Points 323

Deuxième édition de K & R:

Le unary + est nouveau avec la norme ANSI. Il a été ajouté pour la symétrie avec le unaire -.

39voto

bbrown Points 2620

Je l'ai vu utilisé pour plus de clarté, pour souligner la valeur positive par opposition à une valeur négative:

 shift(+1);
shift(-1);
 

Mais c'est une utilisation assez faible. La réponse est définitivement surchargée.

30voto

AndreyT Points 139512

Une des choses que le + unaire intégré fait est de transformer lvalue en rvalue. Par exemple, vous pouvez le faire

 int x;
&x;
 

mais tu ne peux pas faire ça

 &+x;
 

:)

PS "La surcharge" n'est certainement pas la bonne réponse. Unary + été hérité de C et il n'y a pas de surcharge d'opérateur de niveau utilisateur dans C.

Prograide.com

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.

Powered by:

X