函數頭中的箭頭運算子
在C 11 及更高版本中,函數宣告存在兩種語法:
傳統語法:
return-type identifier(argument-declarations...)
現代語法:
auto identifier(argument-declarations...) -> return_type
兩種語法是等效的。然而,現代語法提供了一種從參數類型推斷回傳類型的便捷方法。這在使用 decltype 說明符時特別有用,它使您能夠描述表達式的類型。
在先前的 C 版本中,您可以編寫:
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
但是,編譯器會在嘗試確定返回類型時不知道 a 和 b 是什麼。
要解決此問題,您可以使用 declval:
template <typename T1, typename T2> decltype(std::declval<T1>() + std::declval<T2>()) compose(T1 a, T2 b);
但是,這會變得冗長。相反,現代語法允許您編寫:
template <typename T1, typename T2> auto compose(T1 a, T2 b) -> decltype(a + b);
此語法更簡潔,並保持相同的範圍規則。
C 14 更新:
C 14 允許使用以下語法:
auto identifier(argument-declarations...)
只要函數在使用前完全定義且所有return 語句推導出相同的類型。
使用案例:
箭頭運算子 (->) 語法對於在頭文件中聲明的公共函數仍然有用,您希望在原始檔中隱藏實作。這對於模板函數或透過模板元編程派生的專用具體類型尤其相關。
以上是什麼時候應該在 C 函數頭中使用箭頭運算子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!