Diperkenalkan dalam C 14, idiom decltype(auto) membenarkan pengisytiharan automatik menggunakan peraturan decltype pada yang diberikan ungkapan. Walaupun penggunaan utamanya adalah untuk potongan jenis pemulangan fungsi, terdapat aplikasi lain yang berharga.
Dalam kod generik, decltype(auto) mendayakan pemajuan pemulangan yang sempurna taip tanpa mengetahui jenis asasnya. Ini amat berguna untuk fungsi generik:
template<class Fun, class... Args> decltype(auto) Example(Fun fun, Args&&... args) { return fun(std::forward<Args>(args)...); }
decltype(auto) juga boleh menangguhkan potongan jenis pulangan dalam templat rekursif, menghalang pengulangan tak terhingga. Contohnya:
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>{}); }
Di luar aplikasi utama ini, decltype(auto) mempunyai pelbagai kegunaan lain, seperti yang digariskan dalam Standard draf C (N3936):
Pembolehubah permulaan:
decltype(auto) x3d = i; // decltype(x3d) is int
Pengisytiharan penunjuk:
decltype(auto)*x7d = &i; // decltype(x7d) is int*
Atas ialah kandungan terperinci Apakah Aplikasi `decltype(auto)` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!