天天看點

第十六章 16.2.2節練習

練習16.37

标準庫max函數有兩個參數,它傳回實參中的較大者。此函數有一個模闆類型參數。你能再調用max時傳遞給它一個int和一個double嗎?如果可以,如何做?如果不可以,為什麼?

解答:

default (1)
template <class T> constexpr const T& max (const T& a, const T& b);
      
custom (2)
template <class T, class Compare>
  constexpr const T& max (const T& a, const T& b, Compare comp);
      
initializer list (3)
template <class T> constexpr T max (initializer_list<T> il);
template <class T, class Compare>
  constexpr T max (initializer_list<T> il, Compare comp);      

以上是max的三個聲明。

當傳遞給它一個int和一個double的,T會無法确定類型,是以肯定會在編譯的時候出現錯誤。

練習16.38

當我們調用make_shared(參見12.1.1節,第401行)時,必須提供一個顯示模闆實參。解釋為什麼需要顯示模闆實參以及它是如何使用的。

解答:

這個其實就是定義的問題,603頁和604頁,或者說這節都在回答這個問題。

練習16.39

對16.1.1節(第578頁)中的原始版本的compare函數,使用一個顯示模闆實參,使得可以向函數傳遞兩個字元傳字面常量。

解答:

compare<std::string>("hello", "world")
           

繼續閱讀