Mengapakah Argumen Templat Lalai Hanya Dibenarkan untuk Templat Kelas dalam C ?

Linda Hamilton
Lepaskan: 2024-10-31 02:14:01
asal
806 orang telah melayarinya

Why are Default Template Arguments Only Allowed for Class Templates in C  ?

Argumen Templat Lalai: Templat Kelas lwn. Templat Fungsi Ahli

S: Mengapa argumen templat lalai hanya dibenarkan untuk templat kelas? Mengapa tidak untuk templat fungsi ahli juga?

Contoh:

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

Menurut C , argumen templat lalai hanya sah untuk templat kelas.

J: Argumen templat lalai sememangnya berguna. Pertimbangkan 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>
Salin selepas log masuk

Walau bagaimanapun, rasional untuk sekatan semasa dalam C adalah berakar pada zaman awal bahasa apabila fungsi berdiri bebas dianggap kurang penting. Akibatnya, mereka dikehendaki menyimpulkan semua hujah templat daripada hujah fungsi, menghalang penggunaan nilai lalai.

Had ini menghalang fleksibiliti dan keserasian kod dengan templat fungsi ahli. Untuk membetulkannya, C 0x memperkenalkan argumen templat lalai untuk templat fungsi.

Seperti Bjarne Stroustrup, pencipta C , menyatakan dalam laporan kecacatan:

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

"Sekatan secara serius mengecewakan gaya pengaturcaraan dengan tidak perlu membuat fungsi berdiri bebas berbeza daripada fungsi ahli, sekali gus menjadikannya lebih sukar untuk menulis kod gaya STL."

Atas ialah kandungan terperinci Mengapakah Argumen Templat Lalai Hanya Dibenarkan untuk 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