The first is a pointer to const int (the data cannot change); the second is a const pointer (it cannot be redirected) The first is a const pointer; the second is a pointer to const They are identical Both prevent all modification
A reference can be reassigned to another variable A reference can be null A reference must be initialized and cannot be reseated to refer to another object A reference always occupies more memory than a pointer
It frees memory automatically It can be dereferenced safely It is faster It has its own type (std::nullptr_t) and is never mistaken for an integer during overload resolution
Always 8 bytes At least the size of its largest member (plus any alignment padding), because all members share the same memory The size of its first member The sum of all its members' sizes