從C++入門明確的說法,我知道,模板的參數變量,只有兩種轉換進行:一個是常量轉換,另一個是陣列/函數指針轉換。轉換爲模板
但是,當談到明確的論點時,似乎一切都在改變。 假設我們有一個模板函數:
template <typename T>
int compare(const T &a, const T &b)
{
// do comparison
}
如果沒有明確的說法參與,這樣的函數調用是非法的:
compare("foo", "foobar");
怪異的事情發生了(實際上,它可能不是很奇怪,但我做的不明白),當我們明確地做:
compare<std::string>("foo", "foobar");
看來,在第二個電話,「富」和「foobar」轉換爲std::string
,這是有爭議的。
模板顯式參數是否有特殊規則?謝謝。
爲什麼這看起來有爭議嗎?通過提供顯式的模板參數,您表明您希望將相應的'T'參數轉換爲'const std :: string&',它通過使用字符串文字的'std :: string'構造函數重載來完成。你期待什麼行爲?如果'T'沒有轉換構造函數(或者具有'explicit'),那麼這不會發生。 –
這是否意味着當我們用std :: string顯式綁定T時,會生成實際的函數代碼? –