我有一個關於C++模板的問題。以下代碼段錯誤。在C++模板中的段錯誤
template <typename T1, typename T2>
inline T1 const& max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}
但是,刪除&,它做對了。
template<typename T1, typename T2>
inline T1 const max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}
此外,只是使用T代替T1和T2,它工作得很好。
template<typename T>
inline T const& max(T const &a, T const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4, 5) << std::endl;
}
我在做什麼錯在這裏?
請提及您正在使用的編譯器,包括版本號。如果它是GCC,你用'-Wall'編譯了嗎?您可能會忽略一個警告,導致未定義的行爲。 –
編譯器應該告訴你max()調用返回對臨時的引用。 – tristan
前兩個代碼片段是相同的? – asimes