R Справочное руководство по С++

R.13.3 Адрес перегруженной функции.

   


Назад  |  Вперёд

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

Отметим, что если f() и g() являются перегруженными функциями, то для правильной интерпретации f(&g) или эквивалентного выражения f(g) нужно рассмотреть пересечение множеств выбора для f() и g(). Приведем пример:

           int f(double);
           int f(int);
           int (*pfd)(double) = &f;
           int (*pfi)(int) = &f;
           int (*pfe)(...) = &f;   // ошибка: несоответствие типов

Последняя инициализация ошибочна, не из-за неоднозначности, а потому, что не определено ни одной функции f() типа int(...).

Отметим, что не существует никакого стандартного преобразования ($$R.4) указателя на функцию одного типа в указатель на функцию другого типа ($$R.4.6). В частности, даже если B является общим базовым классом D, две следующие инициализации недопустимы:

           D* f();
           B* (*p1)() = &f;     // ошибка

           void g(D*);
           void (*p2)(B*) = &g; // ошибка

Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.