C ++模板查询

时间:2010-02-08 12:59:50

标签: c++ templates stl

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
}

我有一些基本问题!!

  1. 为什么是范围解析     运营商在这里使用?

  2. 为什么/如何     调用:: max&lt;&gt;(7,42)将会     假设传递的参数是

    整数?

3 个答案:

答案 0 :(得分:6)

  

1)为什么是范围解析   运营商在这里使用?

可能要将此处声明的max与(例如)std :: namespace中的max区分开来。

  

2)为什么/如何调用:: max&lt;&gt;(7,42)将假设   传递的参数是整数吗?

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

要回答你没有问过的问题:

 max('a', 42.7);

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

答案 1 :(得分:3)

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

  2. 发生冲突
  3. 不假设参数是整数,它看到参数是整数。然后假设模板参数为int,因为参数是整数。

答案 2 :(得分:0)

2)你可能意味着它为什么会起作用 - 模板不需要整数,只需要“&lt;”的任何类型运算符已定义。一个整数实现了这一点,因此可以将它传递给模板方法。