C++ 3d.Комментарии

       

Класс 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); }

и выбор перегруженной функции осуществляется по обычным правилам. В общем, никакой мистики.



Содержание раздела