Rumah >pembangunan bahagian belakang >C++ >Bilakah Anda Harus Menggunakan Operator Anak Panah dalam Pengepala Fungsi C?
Operator Anak Panah dalam Pengepala Fungsi
Dalam C 11 dan kemudian, dua sintaks wujud untuk pengisytiharan fungsi:
Tradisional Sintaks:
return-type identifier(argument-declarations...)
Sintaksis Moden:
auto identifier(argument-declarations...) -> return_type
Kedua-dua sintaks adalah setara. Walau bagaimanapun, sintaks moden menyediakan cara yang mudah untuk menyimpulkan jenis pulangan daripada jenis hujah. Ini amat berguna apabila menggunakan penentu decltype, yang membolehkan anda menerangkan jenis ungkapan.
Dalam versi C sebelumnya, anda akan menulis:
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
Walau bagaimanapun, pengkompil akan tidak tahu apa itu a dan b apabila cuba menentukan jenis pemulangan.
Untuk menyelesaikan masalah ini, anda boleh menggunakan declval:
template <typename T1, typename T2> decltype(std::declval<T1>() + std::declval<T2>()) compose(T1 a, T2 b);
Walau bagaimanapun, ini menjadi verbose. Sebaliknya, sintaks moden membolehkan anda menulis:
template <typename T1, typename T2> auto compose(T1 a, T2 b) -> decltype(a + b);
Sintaks ini lebih ringkas dan mengekalkan peraturan skop yang sama.
Kemas Kini C 14:
C 14 membenarkan penggunaan sintaks berikut:
auto identifier(argument-declarations...)
sebagai selagi fungsi ditakrifkan sepenuhnya sebelum digunakan dan semua penyataan kembali menyimpulkan jenis yang sama.
Kes Penggunaan:
Sintaks pengendali anak panah (->) kekal berguna untuk fungsi awam yang diisytiharkan dalam fail pengepala di mana anda ingin menyembunyikan pelaksanaan dalam fail sumber. Ini amat relevan untuk fungsi templat atau jenis konkrit khusus yang diperoleh melalui pengaturcaraan meta templat.
Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan Operator Anak Panah dalam Pengepala Fungsi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!