HI, 我开始学习C ++ STL了 我只是在尝试一些小程序。其中一个是下面的:
inline int const& max (int const& a, int const& b)
{
return a < b ? b : a;
}
template <typename T>
inline T const& max (T const& a, T const& b)
{
return a < b ? b : a;
}
int main()
{
::max(7, 42); // calls the nontemplate for two ints
::max<>(7, 42); // calls max<int> (by argument deduction)
::max('a', 42.7); // calls the nontemplate for two ints
}
我有一些基本问题!!
为什么是范围解析 运营商在这里使用?
为什么/如何 调用:: max&lt;&gt;(7,42)将会 假设传递的参数是
整数?
答案 0 :(得分:6)
1)为什么是范围解析 运营商在这里使用?
可能要将此处声明的max与(例如)std :: namespace中的max区分开来。
2)为什么/如何调用:: max&lt;&gt;(7,42)将假设 传递的参数是整数吗?
它不必假设任何东西 - 整数文字的类型为int。
要回答你没有问过的问题:
max('a', 42.7);
与非模板版本匹配,因为类型转换不是对模板化参数执行,而是在非模板参数上执行。
答案 1 :(得分:3)
大概是为了避免与std :: max
不假设参数是整数,它看到参数是整数。然后假设模板参数为int
,因为参数是整数。
答案 2 :(得分:0)
2)你可能意味着它为什么会起作用 - 模板不需要整数,只需要“&lt;”的任何类型运算符已定义。一个整数实现了这一点,因此可以将它传递给模板方法。