C++ References

A reference in C++ is an alias for an existing variable. References provide another name for a variable and are commonly used to pass data to functions without making a copy.

Declaring a Reference

A reference is declared using the ampersand (&) symbol. It must be initialized when it is declared.

Example: int number = 10; int& ref = number;

Accessing a Variable Through a Reference

A reference can be used just like the original variable. Changes made through the reference also affect the original variable.

Example: int number = 10; int& ref = number; ref = 20;

References with Functions

References can be used as function parameters to allow a function to modify the original variable without copying its value.

Example: void update(int& value) { value = 100; }

Const References

A const reference allows you to refer to a variable without modifying it through the reference. Const references are also useful for efficiently passing large objects to functions.

Example: const int& ref = number;

References vs Pointers

  • A reference must be initialized when it is declared
  • A reference normally cannot be changed to refer to another variable
  • A pointer can be null, while a normal reference should refer to a valid object
  • Pointers use dereferencing with *, while references can be used directly
  • References are commonly used for function parameters and aliases

Common Mistakes with References

  • Declaring a reference without initializing it
  • Creating a reference to an object whose lifetime has ended
  • Assuming a reference can be reseated to another variable
  • Using non-const references when modification is not required

Best Practices for Using References

  • Initialize every reference when it is declared
  • Use const references when the referenced value should not be modified
  • Use references for function parameters when appropriate
  • Make sure the referenced object remains alive for as long as the reference is used
  • Prefer references when you need an alias to an existing object rather than a nullable pointer