T& f() { // some code ... }
const T& f() const { // some code ... }
Я видел это пару раз (во вступительной книге, которую я изучал до сих пор). Я знаю, что первый const делает возвращаемое значение const, другими словами: unmodifiable. Я полагаю, что вторая константа позволяет вызвать функцию для константных объявленных переменных.
Но почему у вас есть обе функции в одном и том же определении класса? И как компилятор отличает их? Я считаю, что второй f() (с константой) можно вызвать и для неконстантных переменных.