@Qubc

Почему int * оценивается как int * вместо int * * при подстановке в шаблонный параметр?

template<typename T> 
void f1(T var) { }

template<typename T> 
void f2(T * var) { }

int main(void) 
{
  int i;
  int * pi;

  f1(i); // f1<int>(i); // T == int // OK
  f1(pi);// f1<int*>(pi); // T == int * //  OK
  
  f2(&i); // f2<int*>(&i); // i is int // &i is int* // T == int * // ???
  f2(pi); // f2<int*>(pi); // pi is int * // T == int * // ??? 
  
  f2(&pi); // f2<int*>(&pi);
}


Почему f2(&i) оценивается как написано, а не как int * * ? Шаблонный аргументы используется для подстановки в шаблонный параметр. Шаблонный аргумент имеет тип int *. Тот же вопрос касается f2(pi); Что я не так понимаю?
  • Вопрос задан
  • 185 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
05 дек. 2022, в 13:18
90000 руб./за проект
05 дек. 2022, в 12:55
500 руб./в час
05 дек. 2022, в 12:44
3000 руб./за проект