C++ 模板和 C# 泛型之間的區別(C# 編程指南)


C# 泛型和 C++ 模板都是用於提供參數化類型支持的語言功能。  然而,這兩者之間存在許多差異。 在語法層面上,C# 泛型是實現參數化類型的更簡單方法,不具有 C++ 模板的復雜性。 此外,C# 並不嘗試提供 C++ 模板所提供的所有功能。 在實現層面,主要區別在於,C# 泛型類型替換是在運行時執行的,從而為實例化的對象保留了泛型類型信息。 有關更多信息,請參見 運行時中的泛型(C# 編程指南)

以下是 C# 泛型和 C++ 模板之間的主要差異:

  • C# 泛型未提供與 C++ 模板相同程度的靈活性。 例如,盡管在 C# 泛型類中可以調用用戶定義的運算符,但不能調用算術運算符。

  • C# 不允許非類型模板參數,如 template C<int i> {}。

  • C# 不支持顯式專用化,即特定類型的模板的自定義實現。

  • C# 不支持部分專用化:類型參數子集的自定義實現。

  • C# 不允許將類型參數用作泛型類型的基類。

  • C# 不允許類型參數具有默認類型。

  • 在 C# 中,盡管構造類型可用作泛型,但泛型類型參數自身不能是泛型。 C++ 確實允許模板參數。

  • C++ 允許那些可能並非對模板中的所有類型參數都有效的代碼,然后將檢查該代碼中是否有用作類型參數的特定類型。 C# 要求相應地編寫類中的代碼,使之能夠使用任何滿足約束的類型。 例如,可以在 C++ 中編寫對類型參數的對象使用算術運算符 + 和 - 的函數,這會在使用不支持這些運算符的類型來實例化模板時產生錯誤。 C# 不允許這樣;唯一允許的語言構造是那些可從約束推導出來的構造。

 

請參見
 
 參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM