繁体   English   中英

C ++模板查询

[英]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
}

我有一些基本问题!

  1. 为什么在这里使用范围解析运算符?

  2. 为什么/如何调用:: max <>(7,42)将假定传递的参数是

    整数?

1)为什么在这里使用范围解析运算符?

可能是为了区分此处声明的最大值与(例如)std ::名称空间中的最大值。

2)为什么/如何调用:: max <>(7,42)会假定传递的参数是整数?

它不必假设任何内容-整数文字的类型为int。

并回答您没有问的问题:

 max('a', 42.7);

匹配非模板版本,因为类型转换不是对模板参数执行,而是对非模板参数执行。

  1. 大概是为了避免与std :: max冲突

  2. 并不是假设参数是整数,而是看到参数是整数。 然后假定模板参数是int因为参数是整数。

对于2),您可能的意思是它为什么起作用-模板不需要整数,只需要定义“ <”运算符的任何类型。 整数可以满足此要求,因此可以将其传递给模板方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM