функция — C ++ шаблоны неявно используют

Я определил такую ​​функцию:

template<typename T>
void SwapMe(T *first, T *second)
{
T tmp = *first;
*first = *second;
*second = tmp;
}

Тогда используя это так:

SwapMe(&data[i], &data[j]);

Как видите, я не использую явно SwapMe<T>(...); но это работает!
Почему стандарт C ++ позволяет избежать явного указания типа аргументов?

2

Решение

Необходимость T может быть счислимый от типа *first,

Явное указание программистом необходимо, только если компилятор не может автоматически сделать вывод.

Это (казалось бы, простое, но на самом деле довольно сложное) явление известно как Аргумент зависимый поиск имени или поиск Кенига, названный в честь его изобретателя Эндрю Кениг.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector