т вызываться только для указат

Автор admin Вторник, 19 мая 2009 11:32

т вызываться только для указателей на const, тогда как второй шаблон допускает любые типы указателей. Следующая программа показывает, как работают эти правила: //: С05:PartialOrder.cpp // Упорядочение шаблонов функций #include using namespace std; tempiate void f(T) { cout « “T” « endl; } tempiate void f(T*) { cout « “T*” « endl; } tempiate void f(const T*) { cout « “const T*” « endl: } int mainO { f(0): // T int i = 0; 208 Глава 5 • Шаблоны f(&1): // Т* const int j – 0: f(&j): // const T* } ///:- Бесспорно, вызов f(&i) соответствует первому шаблону, но поскольку второй шаблон более специализирован, вызывается именно он. Вызов третьего шаблона невозможен, поскольку указатель не является указателем на const. Вызов f (&j) подходит для всех трех шаблонов (например, во втором шаблоне Т будет соответствовать const int), но третий шаблон снова выбирается как наиболее специализированный. Если в наборе перегруженных шаблонов функций не существует «самого специализированного» шаблона, возникает неоднозначность, и компилятор сообщает об ошибке. Из-за этого система приоритето


Комментарии закрыты.