Le premier est seulement capable de retourner une référence à un objet unique et ne peut pas être nulle. Ou plutôt, cela ne devrait pas être nul.
La seconde peut renvoyer le pointeur vers un objet unique ou un tableau d'objets.
Dans les cas où vous souhaitez renvoyer un seul objet qui ne peut pas être nul, # 1 a tendance à être la forme préférée. Dans les cas où un null peut être retourné # 2 doit être utilisé. Certaines API ne renvoient pas de références du tout (comme QT).
Ceci est strictement une différence syntaxique. Ces deux types sont traités exactement de la même manière dans le code compilé: un pointeur vers l'objet (ou le tableau) sera utilisé. Autrement dit, la notation de référence & n'apporte aucune nouvelle fonctionnalité sémantique sur un pointeur normal.
(Ce peut-être juste ce que résume les autres personnes ont écrit)
un rendement de référence, pointeur celui-ci, http://www.parashift.com/c++-faq-lite/references.html – Anycorn
@sbi cette question semble différent de ça. Celui-ci ressemble à "Quelle est la différence entre montrer du doigt un gâteau et le manger? Je pensais que c'était la même chose!" et l'autre semble "Que dois-je faire quand je veux un morceau de gâteau de mon ami? Demandez-le ou mangez-le juste?". Rien dans la question pointée (sans jeu de mots) répond à cette question. J'ai plutôt déprécié celui-ci, parce que c'est "Pas une vraie question". Quelle différence? Le lexical? "L'un utilise et l'autre utilise *". Le syntaxe? "L'un utilise une référence, l'autre utilise un pointeur". L'utilisation des deux? –
Merci pour votre réponse. donc si je crée un std :: map cela va insérer des références aux objets, pas des pointeurs, ni copier les objets lui-même, non? –
Erik