The object that you use to initialize a reference must be of
the same type as the reference, or it must be of a type that is
convertible to the reference type. If you initialize a reference
to a constant using an object that requires conversion, a
temporary object is created. In the following example, a
temporary object of type float is created:
int i; const float& f = i; // reference to a constant float
Attempting to initialize a nonconstant reference with an object that requires a conversion is an error.
Once a reference has been initialized , it cannot be modified
to refer to another object. For example:
int num1 = 10; int num2 = 20; int &RefOne = num1; // valid int &RefOne = num2; // error, two definitions of RefOne RefOne = num2; // assign num2 to num1 int &RefTwo; // error, uninitialized reference int &RefTwo = num2; // valid
Note that the initialization of a reference is not the same as an assignment to a reference. Initialization operates on the actual reference by initializing the reference with the object it is an alias for. Assignment operates through the reference on the object referred to.
A reference can be declared without an initializer:
You cannot have references to references, references to bit fields , arrays of references, or pointers to references.
Initializing References
Passing Arguments by Reference
Pointers
Declarators
Initializers
Temporary Objects