C 14 中decltype(auto) 的引入帶來了一項變革性的功能,擴展了類型推導的可能性。除了允許自動聲明符合 decltype 規則的主要目的之外,decltype(auto) 還提供了無數其他有價值的應用程式。
在通用程式碼中,完美轉發回傳類型至關重要。與可以手動指定返回類型以獲得引用類型的非泛型程式碼不同,decltype(auto) 提供了轉發返回類型的靈活性,無論其引用類型如何,而無需任何先驗知識。
template
decltype(auto) 範例(Fun fun, Args&&... args)
{
return fun(std::forward<Args>(args)...);
}
在遞歸模板中,在遞歸過程中可能會發生無限遞歸如果傳回類型是基於先前的迭代指定的,則模板實例化。透過使用 decltype(auto),返回類型推導被推遲到模板實例化完成,確保正確的類型解析。
template
struct Int {};
constexpr auto iter(Int) ->; Int;
模板
constexpr auto iter(Int) ->; decltype(auto)
{ return iter(Int
int main() { decltype(iter(Int{})) a; }
decltype(auto)的多功能性也擴展到其他上下文,如C 草案標準(N3936) 中所述:
以上是`decltype(auto)` 如何擴充 C 型別推導功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!