【发布时间】:2018-01-04 07:21:35
【问题描述】:
只是无法理解发生了什么。有谁能把这些解释清楚吗?如果有,请给我一些线索或关键字搜索。
template <typename T1, typename T2>
auto max (T1 a, T2 b) {
std::cout << "1" << std::endl;
return a > b ? a : b;
}
template <typename RT, typename T1, typename T2>
RT max (T1 a, T2 b) {
std::cout << "2" << std::endl;
return a > b ? a : b;
}
void func() {
auto a = max(4, 7.2); // 1 ?
auto b = max<long double>(7.2, 4); // 2 ?
auto c = max<int>(3.4, 2); // 2 ?
auto e = max<double, int>(3.4, 2); // 1 ?
}
如果未定义第二个 max 函数,则每个 max 调用都可以正常工作。在什么地方调用第二个最大值。它的规则是什么?
【问题讨论】:
-
可能对你们来说很明显。没有构建问题。我只是不明白如何决定在每个
max调用中调用哪个函数。 -
请给我一些线索或关键字搜索。你要找的关键字可能是模板类型推导。
-
@DeanSeo 谢谢
标签: c++ templates c++14 overloading