Поделиться через


Сопоставление аргументов и указатель 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

С точки зрения сопоставления аргументов левый операнд операторов –>* и .* (указатель на член) обрабатывается так же, как и для операторов . и –> (выбор члена).

См. также

Ссылки

Сопоставление аргументов