2014-12-24 31 views
1

這是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 ...?

+0

[_template參數deduction_](http://en.cppreference.com/w/cpp/language/template_argument_deduction) – P0W

+0

查找[模板參數推導](HTTP:/ /en.cppreference.com/w/cpp/language/template_argument_deduction)。 (或者只需點擊它:)) – Pradhan

回答

1

基於函數參數確定模板參數的過程稱爲模板參數推導。

從C++標準

14.8.2模板參數推導

1當一個函數模板特殊化引用,所有的 模板參數應具有值。這些值可以明確地指定爲 ,或者在某些情況下,可以從使用中推導或從 默認模板參數中獲得。

[實施例:

相關問題