【问题标题】:C++ templates implicitly useC++ 模板隐式使用
【发布时间】:2013-01-23 04:05:03
【问题描述】:

我已经定义了这样的函数:

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

然后像这样使用它:

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

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

【问题讨论】:

  • STL 将此作为his series 的一部分。
  • Oleg,这叫做模板参数推导。我建议你先看看一些好的C++ book

标签: c++ function templates arguments explicit


【解决方案1】:

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

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

这种(看似简单但实际上相当复杂)现象被称为Argument Dependent Name Lookup 或 Koenig 查找,以其发明者 Andrew Koenig 命名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多