在 C 中,可以從函數參數推斷出模板參數,可以方便地進行型別推導。但是,這種推斷不會擴展到類別建構函數。
原因:
類別建構子缺乏推論源自於這樣一個事實:建構子不是建構子的唯一入口點。班級。複製建構子和賦值運算子也可以在沒有有關模板參數的明確資訊的情況下操作物件。
考慮以下範例:
MyClass m(string s); MyClass *pm; *pm = m;
在這種情況下,編譯器很難決定pm 的範本參數,因為 m 和 pm 都缺少此資訊。因此,允許類別建構函數的推理會帶來不確定性和語法困難。
C 17 中的異常:
在 C 17 中,引入了此規則的例外。對於某些類型,例如 std::pair 和 std::tuple,可以從建構子參數推斷模板參數。
當不需要推論時:
在某些情況下,推斷來自建構函數的模板參數可能並不理想。考慮一個使用預設模板參數的類,建構函數可能不會覆寫該參數。如果允許推斷,則可能會覆寫預設值並導致意外行為。
因此,雖然函數參數的模板參數推斷可以增強程式碼簡潔性,但類別建構子不進行此類推斷可以確保清晰度並防止潛在的潛在問題類別使用中的歧義。
以上是與函數不同,為什麼不能從類別建構子推斷 C 模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!