11
votes

Pourquoi le mot-clé est-il pas un type de référence en C ++

Duplicates possibles:

Pourquoi "ceci" est un pointeur et non une référence?
pointeur de sécurité à un pointeur (référence bien à une référence) en C #

Le Ce mot-clé en C ++ obtient un pointeur sur l'objet que je suis actuellement am.

Ma question est pourquoi le type de est-il un type de pointeur et non d'un type de référence. Existe-t-il des conditions dans lesquelles le mot clé serait null ?

Ma pensée immédiate serait dans une fonction statique, mais Visual C ++ au moins est suffisamment intelligente pour repérer cela et signaler Les fonctions de membre statique ne sont pas "ceci" pointeurs . Est-ce dans la norme?


4 commentaires

Dupe Stackoverflow.com/Questtions/645994/...


Dupliquer non et exact! L'autre question n'adresse pas aux questions secondaires posées ici, comme "Cable Ce jamais être null?". J'étais en train de répondre à cette question lorsque cette question était fermée.


Sur la question de savoir si ceci peut être null, la réponse est non, pas dans un programme bien formé.


En pratique, null ceci arrive. Si vous avez un pointeur à un objet et que le pointeur est NULL, vous essayez d'appeler une méthode (par exemple, p-> méthode () ), vous vous plongerez souvent dans la méthode parce que < Code> Ceci est null . Je suis sûr qu'il y a des variations de compilateur. Mais ceci ne sera jamais nul dans un programme correct.


3 Réponses :


0
votes

(probablement pas une réponse complète) Il y a toujours la situation lorsqu'un objet doit se supprimer avec le "dangereux" xxx

de sorte qu'il doit probablement être un pointeur.

m.


2 commentaires

S'il s'agissait d'une référence, vous pouvez Supprimer et ceci; .


Supprimer et ce peut même avoir un avantage sur Supprimer ce en ce que le supplémentaire pourrait vous demander si vous êtes réellement autorisé à supprimer le Objet actuel, c'est-à-dire. s'il était dynamiquement alloué sur le tas. Supprimer ce semble beaucoup plus discret à cet égard, IMO.



3
votes

Parce que les références n'étaient pas ajoutées à C ++ jusqu'à plus tard. À ce moment-là, il était trop tard pour le changer.


0 commentaires

17
votes

Voir Stroustrup's pourquoi ceci pas une référence

Parce que "ceci" a été introduit dans C ++ (vraiment dans C avec des classes) avant que des références ont été ajoutées. En outre, j'ai choisi "Ceci" à suivre l'utilisation de Simula, plutôt que l'utilisation (ultérieure) SmallTalk de "Self".


2 commentaires

Pourquoi le bowvote? , cela vient de BS (apparemment)


Peut-être que quelqu'un pensait avoir copié la réponse de la question en double (ce qui n'est pas le cas, je viens de le découvrir dans cette seconde).