В нестатической ($$R.9.3) функции-члене служебное слово this обозначаетуказатель на объект, с которым эта функция вызывалась. В функции-членекласса X тип this есть X *const, если только функция-член не описанасо спецификацией const или volatile; для этих случаев this имееттип const X *const или volatile X *const соответственно. Еслифункция описана с указанием const и volatile, то тип this будетconst volatile X *const, см. также $$R.18.3.3. Приведем пример: struct s { int a; int f() const; int g() { return a++; } int h() const { return a++; } // ошибка }; int s::f() const { return a; } Операция a++ в теле функции s::h ошибочна, поскольку с ее помощьюделается попытка изменить объект (часть его), с которым вызываласьфункция s::h(). Это недопустимо для функции-члена, описанной соспецификацией const, т.к. this является указателем на const, инымисловами, *this имеет спецификацию const. Функция-член const (т.е. функция-член, описанная со спецификациейconst) может вызываться как для объектов const, так и для объектовбез спецификации const, тогда как функция-член без спецификацииconst может вызываться только для объектов без спецификации const,например: void k(s& x, const s& y) { x.f(); x.g(); y.f(); y.g(); // ошибка } Здесь вызов y.g() является ошибкой, т.к. y есть const, а s::g() -функция-член без спецификации const, которая может изменять(и изменяет) объекты, для которых она вызывалась. Аналогично, только функция-член volatile (т.е. функция-член,описанная со спецификацией volatile) может вызываться для объектовсо спецификацией volatile. Функция-член может быть одновременноconst и volatile. Для объектов const или volatile могут вызываться конструкторы($$R.12.1) и деструкторы ($$R.12.4). Конструкторы ($$R.12.1) идеструкторы ($$R.12.4) нельзя описывать со спецификациями constили volatile.