我正在玩模板。 我有以下模板來總結一個向量的元素:數字類型和字符串的模板函數總和
#include<vector>
#include <iostream>
template <class summable>
summable sum (const std::vector<summable> data, summable initial_value = 0){
std::cout<<"in the function"<<std::endl;
for (auto i : data){
initial_value += i;
}
return initial_value;
}
,它是工作完全正常的數字類型。但如果我嘗試傳遞一個字符串矢量,我沒有收到任何編譯錯誤,但函數沒有被調用。 這裏是我的功能main
:
int main(int argc, char** argv) {
vector<string> s {"Hello" , " ", "There" };
cout<<"Before calling the function\n";
cout<<sum(s);
return 0;
}
我只是得到
調用函數
爲輸出之前。 如果我將函數調用更改爲cout<<sum(s, string(" "));
,則該函數按預期工作。我猜它與我定義默認參數的方式有關,因爲0
不是字符串的有效值(我認爲)。
我的問題是爲什麼我沒有得到任何錯誤?因爲它能夠編譯它應該運行,不是嗎?
你初始化字符串0 –
@PiotrSkotnicki:是的,但爲什麼沒有編譯器抱怨呢?如果它不正確,該代碼如何編譯? –
您可能需要初始化參數,默認值爲'summable initial_value = summable()' –