在 C 14 中引入,decltype(auto) 習慣允許 auto 聲明在給定的情況下使用 decltype 規則表達。雖然它的主要用途是函數的返回類型推導,但還有其他有價值的應用。
在通用程式碼中,decltype(auto) 可以實現傳回的完美轉送類型而不知道其基礎型別。這對於泛型函數特別有用:
template<class Fun, class... Args> decltype(auto) Example(Fun fun, Args&&... args) { return fun(std::forward<Args>(args)...); }
decltype(auto) 還可以延遲遞歸模板中的返回類型推導,防止無限遞歸。例如:
template<int i> struct Int {}; constexpr auto iter(Int<0>) -> Int<0>; template<int i> constexpr auto iter(Int<i>) -> decltype(auto) { return iter(Int<i-1>{}); }
除了這些主要應用之外,decltype(auto) 還有各種其他用途,如C 草案標準(N3936) 所述:
變數初始化:
decltype(auto) x3d = i; // decltype(x3d) is int
指標宣告:
decltype(auto)*x7d = &i; // decltype(x7d) is int*
以上是「decltype(auto)」在 C 中的應用為何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!