Rumah >pembangunan bahagian belakang >C++ >Bilakah Anda Harus Menggunakan Operator Anak Panah dalam Pengepala Fungsi C?

Bilakah Anda Harus Menggunakan Operator Anak Panah dalam Pengepala Fungsi C?

DDD
DDDasal
2024-11-13 05:43:02722semak imbas

When Should You Use the Arrow Operator in C   Function Headers?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn