返回型別協方差

**** 虛擬成員函式 m 的引數或返回值的協方差是其型別 T 在派生類’覆蓋 m 中更具體的地方。然後,型別 T 以與提供 m 的類相同的方式( co ) 改變( 方差 )特異性。C++為作為原始指標或原始引用的協變返回型別提供語言支援 - 協方差適用於指標或引用型別。 ** **

C++支援僅限於返回型別,因為函式返回值是 C++中唯一純粹的 out-arguments ,而協方差只對純 out-argument 型別安全。否則,呼叫程式碼可以提供比接收程式碼期望的特定型別更少的物件。麻省理工學院教授 Barbara Liskov 調查了這個和相關的方差型別安全問題,它現在被稱為 Liskov 替代原則,或 LSP

協方差支援基本上有助於避免向下轉型和動態型別檢查。

由於智慧指標屬於類型別,因此不能直接使用內建的協方差支援智慧指標結果,但可以為產生原始指標的協變 virtual 函式定義明顯協變的virtual 智慧指標結果包裝函式。