-
Notifications
You must be signed in to change notification settings - Fork 0
References
MarJC5 edited this page Oct 28, 2022
·
1 revision
References
are often confused with pointers but three major differences between references and pointers are:
- You cannot have NULL references. You must always be able to assume that a reference is connected to a legitimate piece of storage.
- Once a reference is initialized to an object, it cannot be changed to refer to another object. Pointers can be pointed to another object at any time.
- A reference must be initialized when it is created. Pointers can be initialized at any time (can be
null
).
References are aliases for existing variables. It is a pointer that is constant and always dereferenced and never voi
References are usually used for function argument lists and function return values.
class Student
{
private:
std::string _login;
public:
Student(std::string const & login) : _login(login)
{
}
std::string& getLoginRef()
{
return this->_login;
}
std::string const & getLoginRefConst() const
{
return this->_login;
}
std::string* getLoginPtr()
{
return &(this->_login);
}
std::string const * getLoginPtrConst() const
{
return &(this->_login);
}
};
int main()
{
Student bob = Student("bfubar");
Student const jim = Student("jfubar");
// use a const function on a non-const variable is not a problem
std::cout << bob.getLoginRefConst() << " " << jim.getLoginRefConst() << std::endl;
std::cout << *(bob.getLoginPtrConst()) << " " << *(jim.getLoginPtrConst()) << std::endl;
bob.getLoginRef() = "bobfubar";
std::cout << bob.getLoginRefConst() << std::endl;
*(bob.getLoginPtr()) = "bobbyfubar";
std::cout << bob.getLoginRefConst() << std::endl;
return (0);
}