Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Argumen Templat Lalai Hanya Dibenarkan untuk Templat Kelas dalam C ?

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

Linda Hamilton
Linda Hamiltonasal
2024-10-31 02:14:01758semak imbas

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>

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>

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!

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