8
votes

Surcharge des opérateurs postfix et préfixes

S'il vous plaît considérer le code suivant xxx

ici est mis en œuvre deux versions de postfix et de préfixes, j'ai lu que la différence est faite en introduisant un autre argument charmant, mais j'ai une question si nous Voir la déclaration de ces xxx

Ils sont diverrés par & mark, alors pourquoi il est nécessaire argument factice? Et aussi dans les deux cas de l'exemple ++ opérateur est écrit avant l'argument et Cela ne signifie-t-il pas qu'ils sont les mêmes?


0 commentaires

4 Réponses :


12
votes

Le pré-incraction et la post-augmentation sont deux opérateurs distincts et nécessitent des surcharges séparées.

C ++ ne permet pas de surcharger uniquement sur le type de retour, de sorte que différents types de retour, comme dans votre exemple ne suffiraient pas à désambiguez les deux méthodes.

L'argument factice est le mécanisme que le concepteur de C ++ a choisi pour le désambigation.


1 commentaires

J'imagine qu'il y a une notation dans le bras ou quelque part pourquoi c'était la méthode choisie par désambiguït. La réponse est probablement aussi simple que "il n'y avait pas d'autre moyen".



4
votes

L'opérateur, tout comme n'importe quelle fonction, est identifié par la signature. Le type de retour et les modificateurs avant que le nom de la fonction / opérateur ne soit pas inclus dans cela. Les noms de vos opérateurs sont ici

operator++()
operator++(int)


0 commentaires

2
votes

Les fonctions / méthodes C ++ ne peuvent pas être surchargées par type de retour, uniquement par liste de paramètres. Ignorer le fait que les opérateurs de préfixes et de postfix sont des opérateurs, imaginez s'ils n'étaient que simplement d'autres fonctions, comment le compilateur fonctionnerait-il à utiliser sur la base du type de retour? EG

int x = 2;

const int DoIt()
{
    return 1;
}

int& DoIt()
{
    return x;
}

int y = DoIt();


0 commentaires

3
votes

En pré-augmentation / décrémentation et post-incrément / décrément, la différence est basée sur uniquement le paramètre factice dans la fonction surchargée

operator++()         => Prefix Increment
operator--()         => Prefix Decrement

operator++(int)      => Postfix Increment
operator--(int)      => Postfix Decrement


0 commentaires