We've already understood that a certain level of immutability is preferred in C++; the common example is as follows:
class ...{
int add(const int& first, const int& second) const{
return first + second;
}
}
The const keyword clearly communicates a few important constraints on the code, such as the following:
- The function does not change any of its arguments before returning.
- The function does not change any data member of the class it belongs to.
Let's now imagine an alternate version of add, as follows
int uglyAdd(int& first, int& second){
first = first + second;
aMember = 40;
return first;
}
I called this uglyAdd for a reason—I don't tolerate code like this when I'm programming! This function violates the principle of minimal surprise and does too many things. Reading the function code reveals nothing...