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?
Réponses
Trop de publicités?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.
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é. :-)
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.