我已经定义了这样的功能:
template<typename T>
void SwapMe(T *first, T *second)
{
T tmp = *first;
*first = *second;
*second = tmp;
}
然后像这样使用它:
SwapMe(&data[i], &data[j]);
如您所见,我没有明确使用,SwapMe<T>(...);
但它确实有效!
为什么 C++ 标准允许避免显式指定参数的类型?
必要的T
可以从 的类型推导*first
出来。
仅当编译器不能自动进行推导时,才需要由程序员显式指定。
这种(看似简单但实际上非常复杂)现象被称为Argument Dependent Name Lookup或 Koenig lookup,以其发明者Andrew Koenig的名字命名。