Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Argumen Templat Lalai Terhad kepada Templat Kelas sahaja dalam C ?

Mengapakah Argumen Templat Lalai Terhad kepada Templat Kelas sahaja dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 13:35:29452semak imbas

Why Are Default Template Arguments Restricted to Only Class Templates in C  ?

Argumen Templat Lalai: Mengapa Terhad kepada Templat Kelas?

Walaupun kemudahan yang ditawarkan oleh argumen templat lalai, mereka secara anehnya terhad kepada templat kelas , menyebabkan pengaturcara tertanya-tanya mengapa ia tidak boleh digunakan pada templat fungsi ahli.

Argumen untuk Argumen Templat Lalai dalam Templat Fungsi

Pertimbangkan contoh my_class dengan ahli templat fungsi:

<code class="cpp">struct my_class {
  template<class T = int>
  void mymember(T* vec) {
    // ...
  }
};</code>

Secara intuitif, menyatakan jenis lalai untuk T dalam templat fungsi ahli masuk akal. Walau bagaimanapun, C menguatkuasakan sekatan bahawa argumen templat lalai hanya dibenarkan untuk templat kelas.

Sebab Di Sebalik Sekatan

Had tersebut berpunca daripada sebab sejarah apabila fungsi berdiri bebas dianggap lebih rendah daripada fungsi ahli. Dengan memaksa semua hujah templat disimpulkan daripada hujah fungsi, ia memastikan perlakuan yang konsisten.

Masa Depan Argumen Templat Lalai dalam Templat Fungsi

C 0x mengiktiraf batasan daripada sekatan sedia ada. Kemasukan argumen templat lalai untuk templat fungsi meningkatkan fleksibiliti pengekodan dan sejajar dengan gaya pengaturcaraan STL.

Menurut Bjarne Stroustrup, penyokong perubahan ini, larangan argumen templat lalai untuk templat fungsi ialah "suatu yang salah sisa." Beliau berhujah bahawa ia tidak semestinya membezakan fungsi berdiri bebas daripada fungsi ahli, menjadikannya mencabar untuk mengekalkan konsistensi dalam kod.

Faedah Argumen Templat Lalai dalam Templat Fungsi

Pengenalan hujah templat lalai ke dalam templat fungsi membolehkan pengalaman pengekodan yang lebih diperkemas dan intuitif. Sebagai contoh, pertimbangkan kes fungsi isihan:

<code class="cpp">template<typename Iterator,
         typename Comp = std::less<
            typename std::iterator_traits<Iterator>::value_type> >
void sort(Iterator beg, Iterator end, Comp c = Comp()) {
  ...
}</code>

Dengan argumen templat lalai untuk Comp, fungsi isihan boleh dipanggil dengan atau tanpa pembanding eksplisit, memudahkan sintaks dan meningkatkan kebolehbacaan kod.

Atas ialah kandungan terperinci Mengapakah Argumen Templat Lalai Terhad kepada Templat Kelas sahaja dalam 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