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


Адреса перегруженных функций

При использовании имени функции без аргументов возвращается адрес этой функции. Например:

int Func( int i, int j );
int Func( long l );

...

int (*pFunc) ( int, int ) = Func;

В предыдущем примере выбирается первая версия функции Func и ее адрес копируется в переменную pFunc.

Для определения требуемой версии функции компилятор ищет функцию со списком аргументов, который точно соответствует указанным аргументам. Аргументы в объявлениях перегруженной функции сравниваются с одним из следующих объектов:

  • инициализируемый объект (как показано в предыдущем примере);

  • левая часть оператора присваивания;

  • формальный аргумент для функции;

  • формальный аргумент для определенного пользователем оператора;

  • тип возвращаемого функцией значения.

Если точное совпадение не найдено, выражение, получающее адрес функции, неоднозначно и создается ошибка.

Обратите внимание, что хотя в предыдущем примере использованная функция Func не является функцией-членом, при получении адреса перегруженной функции-члена применяются те же самые правила.

См. также

Ссылки

Перегрузка