[英]C++ Templates queries
嗨,我开始学习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 <>(7,42)将假定传递的参数是
整数?
1)为什么在这里使用范围解析运算符?
可能是为了区分此处声明的最大值与(例如)std ::名称空间中的最大值。
2)为什么/如何调用:: max <>(7,42)会假定传递的参数是整数?
它不必假设任何内容-整数文字的类型为int。
并回答您没有问的问题:
max('a', 42.7);
匹配非模板版本,因为类型转换不是对模板参数执行,而是对非模板参数执行。
大概是为了避免与std :: max冲突
并不是假设参数是整数,而是看到参数是整数。 然后假定模板参数是int
因为参数是整数。
对于2),您可能的意思是它为什么起作用-模板不需要整数,只需要定义“ <”运算符的任何类型。 整数可以满足此要求,因此可以将其传递给模板方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.