2

我已经定义了这样的功能:

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

然后像这样使用它:

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

如您所见,我没有明确使用,SwapMe<T>(...);但它确实有效!
为什么 C++ 标准允许避免显式指定参数的类型?

4

1 回答 1

5

必要的T可以从 的类型推导*first出来。

仅当编译器不能自动进行推导时,才需要由程序员显式指定。

这种(看似简单但实际上非常复杂)现象被称为Argument Dependent Name Lookup或 Koenig lookup,以其发明者Andrew Koenig的名字命名。

于 2013-01-23T04:09:42.103 回答