convertir de référence de pointeur de la représentation en C++
Est-il un moyen de "convertir" une référence de pointeur en c++? Dans l'exemple ci-dessous, func
a déjà défini prototype et je ne peux pas le changer, mais func
est mon API, et j'aimerais passer les deux paramètres, ou de l'une (et le deuxième set NULL), ou ni l' (à la fois la valeur NULL):
void func2(some1 *p1, some2 *p2);
func(some1& obj, some2& obj2)
{
func2(..);
}
"&", de même que pour les non références. Comme dans
Vous pouvez prendre l'adresse de référence. Il vous donne l'adresse de l'visées à l'objet. I. e. vous pouvez le faire
NULL références sont faciles à créer.
Ce n'est pas la création d'référence NULLE, c'est la création d'un comportement indéfini.
Oh, il n'existe, tout droit.... (frissons)... vous ne voudriez pas croire les choses que j'ai vu... juste ... ne me demandez pas d'y retourner, c'est tout.
func2(&obj, &obj2)
Vous pouvez prendre l'adresse de référence. Il vous donne l'adresse de l'visées à l'objet. I. e. vous pouvez le faire
func2(&obj1, NULL)
. Notez qu'il n'existe pas de moyen de passer NULL
à func
; il n'y a pas une telle chose comme un NULL
de référence.NULL références sont faciles à créer.
int* pi = 0; int& ri = π
. Bien sûr, c'est méchant, mais pas impossible et parfois fait par accident.Ce n'est pas la création d'référence NULLE, c'est la création d'un comportement indéfini.
Oh, il n'existe, tout droit.... (frissons)... vous ne voudriez pas croire les choses que j'ai vu... juste ... ne me demandez pas d'y retourner, c'est tout.
OriginalL'auteur Mark | 2013-09-26
Vous devez vous connecter pour publier un commentaire.
func2(&obj, &obj2);
Utilisation des paramètres de référence comme les variables normales.
OriginalL'auteur
Vient d'obtenir l'adresse de l'objet.
Ou dans votre cas:
some1& obj;
est faux. Vous ne pouvez pas créer une référence qui ne fait pas référence à quoi que ce soit.Aussi, ce n'est pas prendre l'adresse de la référence, mais l'adresse de ce à quoi il se réfère. Les références n'ont pas d'adresse, car il n'est pas précisé si oui ou non les références nécessitent le stockage.
Désolé, ce n'était pas destiné à être une déclaration. Je viens de copier la façon dont la variable a été déclarée dans les OP du code.
Vous avez raison, mais il me semble clair que l'OP veut l'adresse de la valeur d'origine. Il veut juste le traiter comme un pointeur.
La droite. J'ai été plus de commentaires sur votre langue d'origine, lorsque vous avez dit "obtenir l'adresse de la référence", qui est quelque chose qui n'existe pas.
OriginalL'auteur
que vous devriez utiliser.
OriginalL'auteur
Pour un design épuré mettre tous dans une classe (ou utiliser des espaces de noms)
OriginalL'auteur
Dans les cas normaux, vous pouvez simplement utiliser
&
:mais
operator&
peut être surchargé, doncstd::addressof
(depuis C++11) doit être utilisé pour les cas:OriginalL'auteur