[计算机科学经

Name stdendl endif myfirsthpp templates inclusion

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 義。 注意,只要 function template 被使用,就會自動引發具現化過程。程式員沒有必要個別申請具現 化過程。 2 如果某個引數的型別定義於 namespace std ㆗(例如 string),根據 C++搜尋規則,::max()和 std::max()都會被找到(譯註:那就會引發歧義性)。 3 「㆒份實物,適用所有型別」,理論㆖成立,實際不可行。畢竟所有語言規則都奠基於「將會產出 不同實物」的概念(all language rules are based on the concept that different entities are generated)。 C++ Templates - The Complete Guide 2 12 Function Templates(函式模板) 類似情況,另兩次對 max()的呼叫被具現化為: const double& max (double const&, double const&); const std::string& max (std::string const&, std::string const&); 如果試圖以某個型別來具現化 function template,而該型別並未支援 function template ㆗用到的操 作,就會導致編譯錯誤。例如: std::complex<float> c1, c2; ... max(c1,c2); // 此型別並不提供 operator< // 編譯期出錯 實際㆖,templates 會被編譯兩次: 1. 不具現化,只是對 template 程式碼進行語法檢查以發現諸如「缺少分號」等等的語法錯誤。 2. 具現化時,編譯器檢查 template 程式碼㆗的所有呼叫是否合法,諸如「未獲支援之函式呼叫」 便會在這個階段被檢查出來。 這會導致㆒個嚴重問題:當 function tem...
View Full Document

Ask a homework question - tutors are online