`) Lakukan dalam Tajuk Fungsi? " />
Operator Anak Panah (->) dalam Tajuk Fungsi
Artikel ini mengkaji pengendali anak panah (->) yang digunakan dalam tajuk fungsi, yang merupakan aspek asas sintaks C 11.
Memahami Anak Panah Operator
C 11 memperkenalkan dua sintaks yang setara untuk pengisytiharan fungsi:
Operator anak panah (->;) dalam sintaks kedua mempunyai tujuan penting Ia membolehkan jenis pemulangan fungsi disimpulkan daripada hujahnya menggunakan kata kunci decltype.
Mengapa Gunakan Jenis Pulangan Auto-Deduce?
Dalam situasi tertentu, adalah berfaedah untuk memperoleh jenis pulangan secara dinamik berdasarkan jenis argumen Sebagai contoh, pertimbangkan fungsi berikut yang mengira jumlah dua nilai:
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
Dalam kes ini, argumen decltype memberitahu pengkompil bahawa. jenis pulangan hendaklah sama dengan jenis ungkapan a b. Walau bagaimanapun, pengisytiharan ini menimbulkan ralat kerana pengkompil tidak mempunyai maklumat tentang a dan b dalam hujah decltype.
Mengatasi Ralat
Untuk menyelesaikan isu ini, anda boleh sama ada gunakan std::declval dan parameter templat untuk menentukan jenis secara manual:
template <typename T1, typename T2> decltype(std::declval<T1>() + std::declval<T2>()) compose(T1 a, T2 b);
atau gunakan sintaks pengisytiharan ganti dengan pengendali anak panah (->):
template <typename T1, typename T2> auto compose(T1 a, T2 b) -> decltype(a + b);
Pilihan terakhir adalah lebih ringkas dan menyelaraskan peraturan skop.
C 14 Penambahbaikan
Dalam C 14, sintaks berikut juga dibenarkan selagi kerana fungsi ditakrifkan sepenuhnya sebelum digunakan dan semua penyataan pulangan menyimpulkan kepada jenis yang sama:
auto identifier (argument-declarations...)
Walau bagaimanapun, pengendali anak panah (->) kekal berguna untuk mengisytiharkan fungsi awam (dalam pengepala) sambil menyembunyikannya badan dalam fail sumber.
Atas ialah kandungan terperinci Apakah yang dilakukan oleh Operator Anak Panah (`->`) dalam Tajuk Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!