c++ - 没有指定模板参数但仍然有效

标签 c++ templates stl

这是 STL make_heap 的函数声明,它期望随机访问迭代器作为参数

template <class RandomAccessIterator>
    void make_heap (RandomAccessIterator first, RandomAccessIterator last); 

但是当我们调用它时:

 std::make_heap (v.begin(),v.end());

我们不指定模板参数。为什么会这样……?

C++ 是否会自动检测我们在函数调用中传递的数据类型...?

这是隐式类型转换 ...吗?

最佳答案

根据函数参数确定模板参数的过程称为模板参数推导。

来自 C++ 标准

14.8.2 模板参数推导

1 When a function template specialization is referenced, all of the template arguments shall have values. The values can be explicitly specified or, in some cases, be deduced from the use or obtained from default template-arguments.

[示例:

void f(Array<dcomplex>& cv, Array<int>& ci) {
sort(cv); // calls sort(Array<dcomplex>&)
sort(ci); // calls sort(Array<int>&)
}

关于c++ - 没有指定模板参数但仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27633980/

相关文章:

c++ - PhysX 中的时间步长

c++ - 为什么我的复制构造函数不起作用? (C++)

c++ - 如何连接几张 map ?

c++ - 检测 CRTP 基类的 sibling

c++ - 更优雅的重载模板类解决​​方案

c++ - for_each 避免原始循环

c++ - 为 C++ 程序编写 BNFC 语法

c++ - 套接字中的页面对齐发送缓冲区

c++ - 模板参数推导出错

c++ - 在 C++ 中序列化一个类