Are these the same:
int foo(bar* p) { return p->someInt(); }
and
int foo(bar& r) { return r.someInt(); }
Ignore the null pointer potential. Are these two functions functionally identical no matter if someInt() is virtual or if they are passed a bar or a subclass of bar?
Does this slice anything:
bar& ref = *ptr_to_bar;
C++ references are intentionally not specified in the standard to be implemented using pointers. A reference is more like a ‘synonym’ to a variable than a pointer to it. This semantics opens some possible optimizations for the compiler when it’s possible to realize that a pointer would be an overkill in some situations.
A few more differences: