2010-02-08 51 views
0

HI, 我開始學習C++ STL的 我只是想他們中的一些小programs.one低於:C++模板查詢

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. 爲什麼/如何 ,調用::最大<>(7,42)將 假定傳遞的參數是

    的整數?

+0

一條建議:像這樣的const引用傳遞/返回int並不是真正的慣用法。只要做到這一點:「int max(int a,int b)」 – Manuel 2010-02-08 13:05:40

回答

6

1)爲什麼是這裏使用範圍解析 操作?

可能區分這裏聲明的最大值和std :: namespace中的最大值。

2)爲什麼/怎麼就是調用::最大<>(7,42)會認爲通過 參數是整數?

它不必假設任何東西 - 整數文字的類型爲int。

並回答你沒有問這個問題:

max('a', 42.7); 

非模板版本相匹配,因爲類型轉換上沒有模板參數進行的,但在非模板的人進行。

3
  1. 大概是爲了避免與標準::最大

  2. 這不是假設參數都是整數的衝突,它看到的參數是整數。然後它假定模板參數是int,因爲參數是整數。

+0

#1並不重要,除非他有'使用命名空間標準;'或'使用std :: max;'某處,順便說一句。 – 2010-02-08 13:08:01

0

對於2)你可能的意思是,它爲什麼工作 - 模板不需要整數,只需定義「<」運算符的任何類型。一個整數滿足這個,所以可以將它傳遞給模板方法。