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

时间:2014-12-24 08:40:00

标签: c++ templates stl

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

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

但是当我们称之为:

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

我们不指定template argument。为什么......?

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

这是implicit type-casting ......?

1 个答案:

答案 0 :(得分:1)

基于函数参数确定模板参数的过程称为模板参数推导。

来自C ++标准

14.8.2模板参数推断

  

1引用函数模板特化时,全部   模板参数应具有值。值可以明确   指定或在某些情况下,从使用中推断出或从中获得   默认模板参数。

[例如:

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