When the c++ compiler generates very similar assembler code for a reference and pointer, why is using references preferred (and considered safer) compared to pointers?
A pointer is an independent variable that can be reassigned to point to another date item, unintialized memory, or just no where at all (NULL). A pointer can be incremented, decremented, subtracted from another pointer of the same type, etc. A reference is tied to an existing variable and is simply an alias for the variable name.
A reference is always initialized from an existing object, thus it can never be NULL, whereas a pointer variable is allowed to be NULL.
EDIT: Thanks for all of the replies. Yes, a reference can indeed point to garbage, I forgot about dangling references.
Well the answer you point out answer that. From the "safer" point of view I think that basically it is hard to write code like :
int* i;
// ...
cout << *i << endl; // segfault
As a reference is always initialized, and
MyObject* po = new MyObject(foo);
// ...
delete po;
// ...
po->doSomething(); // segfault
But as said in the question you mention, that's not only because they are safer that references are used ...
my2c