The std::string accessors (back, front, at, and operator[]) have const and non-const overloads, as below:
char& x();
const char& x() const;
Why does the second version return a const reference, as opposed to simply returning the char by value (as a copy)?
According to the rules of thumb on how to pass objects around, shouldn't small objects be passed by value when there's no need to modify the original?
 
     
     
    