未指定模板参数,但仍有效



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

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

但是当我们称之为:

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

我们没有指定template argument,为什么会这样...?

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

这是implicit type-casting吗?

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

从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>&)
}

最新更新