Класс String
Обратите внимание, что для неконстантного объекта, s.operator[](1) означает Cref(s,1).
А вот здесь хотелось бы поподробнее. Почему в одном классе мы можем объявить const и не const функции-члены? Как осуществляется выбор перегруженной функции?
Рассмотрим следующее объявление: struct X { void f(int); void f(int) const; };
void h() { const X cx; cx.f(1);
X x; x.f(2); }
Ввиду того, что функция-член всегда имеет скрытый параметр this, компилятор воспринимает данное объявление как // псевдокод struct X { void f( X *const this); void f(const X *const this); };
void h() { const X cx; X::f(&cx,1);
X x; X::f(&x,2); }
и выбор перегруженной функции осуществляется по обычным правилам. В общем, никакой мистики.