【发布时间】:2018-02-03 01:09:26
【问题描述】:
我有一个关于 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() 调用返回对临时的引用。
-
前两个代码sn-ps是否相同?