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