C
double i = 5;
double &j = i;
double &leer;
cout << sizeof (i) << "\n"; //Gibt 8, da double
cout << sizeof (j); //Gibt 8, da 'grösse des inhalts der var i'
cout << sizeof (leer); //Das geht nicht. Da stirb der compiler.
er wird wohl eher hier sterben:
double &leer;
abgesehen von ästhetischen und semantischen gesichtspunkten ist die wahl zwischen pointer und referenz auch eine optimierungsfrage. in allen gängigen implementierungen wird eine referenz intern durch pointer implementiert - aber zwingend nur dann wenn der compiler das referenzierte objekt, dort wo die referenz benutzt wird, nicht direkt sehen kann. falls also funktionen nicht inline expandiert werden oder - mitunter - wenn referenzen an temporaries gebunden werden. im übrigen zwingt die verwendung von pointern (und des addressoperators) objekte dazu, tatsächlich auch eine adresse zu haben. das ist bei register objekten aber nicht der fall, folglich können objekte die per pointer übergeben werden - theoretisch - nicht nur in registern existieren, was zweifellos ein nachteil ist. ein hoch optimierender compiler kann hier sicherlich z.T. abhilfe schaffen wenn es gelingt, den pointer zu eliminieren, aber prinzipiell ist das a)nicht immer möglich und b)teilweise sehr schwierig wegen aliasing problemen.