首頁 > 後端開發 > C++ > 主體

什麼時候應該在 C 函數頭中使用箭頭運算子?

DDD
發布: 2024-11-13 05:43:02
原創
652 人瀏覽過

When Should You Use the Arrow Operator in C   Function Headers?

函數頭中的箭頭運算子

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板