Mengapakah Argumen Templat Lalai Terhad kepada Templat Kelas dalam C ?

Susan Sarandon
Lepaskan: 2024-11-01 17:29:30
asal
456 orang telah melayarinya

Why are Default Template Arguments Restricted to Class Templates in C  ?

Mengapa Argumen Templat Lalai Terhad kepada Templat Kelas

Dalam C , hujah templat lalai hanya dibenarkan pada templat kelas tetapi tidak pada templat fungsi. Sekatan ini mungkin kelihatan mengejutkan, tetapi terdapat beberapa sebab di sebaliknya.

Argumen Templat Lalai untuk Templat Kelas

Argumen templat lalai membenarkan templat kelas memberikan nilai lalai untuk parameter tertentu. Ini boleh berguna apabila nilai lalai tidak mungkin berubah untuk kebanyakan contoh templat. Sebagai contoh, templat kelas untuk algoritma pengisihan boleh mempunyai argumen templat lalai untuk fungsi perbandingan yang digunakan dalam pengisihan.

Sekatan untuk Templat Fungsi

Walau bagaimanapun, argumen templat lalai tidak dibenarkan untuk fungsi templat kerana ia akan memperkenalkan kekaburan. Pertimbangkan contoh hipotesis berikut:

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

Dalam contoh ini, tidak jelas sama ada T ialah jenis lalai untuk fungsi mymember atau untuk templat my_class itu sendiri. Kekaburan ini boleh membawa kepada ralat halus dalam kod.

Kedatangan C 11

Sebelum C 11, larangan argumen templat lalai untuk templat fungsi merupakan pengehadan yang ketara. Walau bagaimanapun, C 11 memperkenalkan ciri baharu yang dipanggil "jenis alias" yang membolehkan kami menentukan alias untuk jenis. Ini menyediakan penyelesaian untuk kekurangan argumen templat lalai untuk templat fungsi. Sebagai contoh, contoh di atas boleh ditulis semula seperti berikut:

<code class="cpp">struct my_class {
  typedef int default_type;
  template<class T = default_type>
  void mymember(T* vec) {
    // ...
  }
};</code>
Salin selepas log masuk

Walaupun jenis alias tidak semudah hujah templat lalai, ia menyediakan fungsi yang serupa dan membolehkan kami mengatasi batasan piawaian C semasa .

Perspektif Bjarne Stroustrup

Dalam laporan kecacatan, Bjarne Stroustrup, pereka asal C , menyatakan pandangannya tentang larangan argumen templat lalai untuk templat fungsi:

Larangan hujah templat lalai untuk templat fungsi ialah peninggalan yang salah lahir pada masa di mana fungsi berdiri bebas dianggap sebagai warga kelas kedua dan memerlukan semua hujah templat disimpulkan daripada hujah fungsi dan bukannya ditentukan.

Atas ialah kandungan terperinci Mengapakah Argumen Templat Lalai Terhad kepada Templat Kelas dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!