Assigning reference return value to a variable
When assigning a reference return value to a variable, a copy is made. Here is an example:
class References {
private:
std::string name;
public:
References(const std::string& name) : name(name) {
};
virtual ~References() {
};
const std::string& getName() const {
return name;
};
};
References r("foo");
std::string n = r.getName();
This code makes a copy of the name member variable from the References class and puts the copy into the variable n.
Assigning reference return value to a reference variable
When assigning a reference return value to a reference variable, no copy is made. Here is an example:
class References {
private:
std::string name;
public:
References(const std::string& name) : name(name) {
};
virtual ~References() {
};
const std::string& getName() const {
return name;
};
};
References r("foo");
const std::string& n = r.getName();
This code does not make a copy of the name member variable. Instead, the reference variable is now a reference directly to the member variable inside the class.
Passing a reference return value to a method that takes a reference
When you pass the return value from a method that returns a reference directly into a method that takes a reference, no copy is made. Here is an example:
class References {
private:
std::string name;
public:
References(const std::string& name) : name(name) {
};
virtual ~References() {
};
const std::string& getName() const {
return name;
};
};
void print(const std::string& s) {
...;
}
References r("foo");
print(r.getName());
This passes the reference returned directly into the method as a reference. Therefore, no copy is made.
Using a reference method in a comparison operator
This is the same as the method invocation example above because all operators take references.