My friend. You have that backwards. Passing by reference will allow altering of the original. Where as pass by value makes a copy...
pass by reference sample
pass by value
void MultiBy2( int& iValue)
iValue = 3 * 2; //value will exist out side of function
The important thing is when you have large objects that are not feasible to pass by value such the contents of large string because when you pass by reference you are passing the 32 bit address instead of the values within the object.
int MultiBy2( int iValue )
iValue = iValue * 2;
return iValue; //iValue returned and must be captured in variable i.e. int myValue = MultipBy2( 2 );
You can also prevent modification when passing by reference by adding the key word const i.e. const int& iValue......
This enables passing large objects by reference for read only purposes... Make sense?