Сопоставление аргументов и указатель this
Функции-члены класса обрабатываются по-разному в зависимости от того, были ли они объявлены с ключевым словом static. Поскольку нестатические функции имеют неявный аргумент, который предоставляет указатель this, считается, что они имеют на один аргумент больше, чем статические. В остальном они объявляются одинаково.
Такие нестатические функции-члены требуют, чтобы неявный указатель this соответствовал типу объекта, через который выполняется вызов функции. Или же (для перегруженных операторов) они требуют, чтобы первый аргумент совпадал с объектом, к которому применяется оператор. (Дополнительные сведения о перегруженных операторах см. в разделе Перегруженные операторы.)
В отличие от других аргументов в перегруженных функциях, при попытке сопоставить аргумент указателя this не создаются никакие временные объекты и не предпринимается никаких попыток преобразования.
Если для обращения к функции-члену используется оператор выбора члена – >, то аргумент указателя this имеет тип class-name * const. Если элементы объявлены как const или volatile, то используются типы const class-name* const и volatile class-name * const соответственно.
Оператор выбора члена . работает точно так же, за исключением того, что в качестве префикса к имени объекта подставляется неявный оператор взятия адреса &. В следующем примере показано, как это делается:
// Expression encountered in code
obj.name
// How the compiler treats it
(&obj)->name
С точки зрения сопоставления аргументов левый операнд операторов –>* и .* (указатель на член) обрабатывается так же, как и для операторов . и –> (выбор члена).