In "The C++ Programming Language (4th Edition)" Section 2.3.1, Stroustrup shows 3 different ways to access members of a struct:
void f(Vector v, Vector& rv, Vector* pv)
{
int i1 = v.sz; // access through name
int i2 = rv.sz; // access through reference
int i4 = pv->sz; // access through pointer
}
- I understand that for the first one,
vis passed-by-value, so a copy of the first argument is put on the function's stack and the value of its sizeszis stored inside ofi1. - In the second example,
rvis a reference to the struct passed as the second argument. Because it is a reference, we can access the value referred to byrvwithout a*prefix.
I'm not too sure I understand what's going on with i4, and why someone would pick the third example over the second (or vice-versa).