Pourquoi ne puis-je pas ajouter des pointeurs?
J'ai un code très similaire à ceci:
LINT_rep::Iterator::difference_type LINT_rep::Iterator::operator+(const Iterator& right)const
{
return (this + &right);//IN THIS PLACE I'M GETTING AN ERROR
}
LINT_rep::Iterator::difference_type LINT_rep::Iterator::operator-(const Iterator& right)const
{//substracts one iterator from another
return (this - &right);//HERE EVERYTHING IS FINE
}
err msg: Error 1 error C2110: '+' : cannot add two pointers
Pourquoi j'obtiens une erreur à un seul endroit et pas dans les deux?
source d'informationauteur There is nothing we can do
Vous devez vous connecter pour publier un commentaire.
Pointeur de plus est interdit en C++, vous ne pouvez soustraction de deux pointeurs.
La raison pour cela est que la soustraction de deux pointeurs donne logiquement explicable résultat - le décalage dans la mémoire entre deux pointeurs. De même, vous pouvez soustraire ou d'ajouter un nombre entier à partir d'un pointeur, ce qui signifie "déplacez le pointeur vers le haut ou vers le bas". L'ajout d'un pointeur vers un pointeur est quelque chose qui est difficile à expliquer. Quelle serait la résultante pointner représenter?
Si par hasard vous avez explicitement le besoin d'un pointeur à un endroit de la mémoire dont l'adresse est la somme de certains autres deux adresses, vous pouvez lancer les deux pointeurs de
int
ajouterint
s, et jeta un pointeur. N'oubliez pas, cependant, que cette solution à des besoins énormes de soins sur l'arithmétique des pointeurs et c'est quelque chose que vous ne devriez jamais faire.742 Evergreen Terrasse + 1 = 743 Evergreen Terrasse
742 Evergreen Terrasse - 1 = 741 Evergreen Terrasse
743 Evergreen Terrasse - 741 Evergreen Terrasse = 2
743 Evergreen Terrace + 741 Evergreen Terrasse = ???
Soustraction de deux pointeurs vous donne la distance entre eux. Quel serait le résultat de l'ajout de deux pointeurs?
Je suppose que dans votre exemple, le résultat que vous attendiez, c'était d'ajouter ou de soustraire un pointeur à un décalage d'être déplacé, et non à un autre pointeur.
En C++, vous pouvez soustraire 2 pointeurs (le décalage dans la mémoire entre eux) ou d'ajouter un pointeur vers un entier de valeur (le déplacement d'un pointeur vers un autre emplacement de mémoire étant incrémenté de la valeur * sizeof(object_class)). Juste l'ajout de 2 pointeurs ne font pas sens, en C++, mais si vous êtes sûr que vous voulez ajouter 2 emplacements de mémoire les adresses, il suffit d'ajouter alors que des valeurs entières non signées (à l'aide de transtypage).
D'autres réponses déjà expliqué pourquoi, ce que Vous faites ne fonctionne pas, mais ma conjecture est que Vous souhaitez définir typique
operator+
pour un itérateur, mais s'est perdu dans cette tentative.Les deux pointeurs et standard d'accès aléatoire itérateurs permettent à l'avance le pointeur ou l'itérateur par une intégrale de la valeur. Dans le cas d'itérateurs, un
operator+
est défini, qui prend une valeur intégrale en argument et renvoie un itérateur.Vous pouvez définir cet opérateur comme une méthode, mais cette méthode va Vous permettre d'écrire
mais pas
De faire le plus commutative Vous devez définir un ami non membre de la fonction qui prend de la distance que le premier paramètre et un itérateur objet comme une seconde
Même si vous avez été autorisé à ajouter deux pointeurs, ce:
aurait point de nulle part. Pensez - ce pourrait être quelque chose comme 0x00123456, et &à droite sera quelque part dans la même gamme (0x00000000..0x80000000 - c'est à dire 0x00321321, par exemple). Si vous les ajoutez, résultant de l'adresse de point de très loin les deux variables (0x00123456 + 0x00321321 == 0x00444777, qui sera trop loin de les deux "ce" et &droite), vous pourriez retrouver dans la mémoire réservée (0x8xxxxxxx sur win), etc. Aussi, les pointeurs peut déborder. Qui est (probablement) pourquoi c'est interdit.
Si vous voulez ajouter quelque chose à l'pointeur, ajoutez entier.
Permet de dire que vous avez 2 pointeurs et vous savez que l'un des deux ou les deux sont nuls. Vous voulez retourner à celui qui n'est pas null ou null dans le cas où les deux sont nuls. Le plus simple serait de somme/xor. C'est le propper cas à la somme des pointeurs.