Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Perlu Menggunakan Kurungan Sudut Kosong untuk Templat Kelas dengan Argumen Lalai dalam C 11 dan Terdahulu?

Mengapa Perlu Menggunakan Kurungan Sudut Kosong untuk Templat Kelas dengan Argumen Lalai dalam C 11 dan Terdahulu?

Barbara Streisand
Barbara Streisandasal
2024-11-04 14:46:05566semak imbas

Why Is It Necessary to Use Empty Angle Brackets for Class Templates with Default Arguments in C  11 and Earlier?

Memahami Argumen Templat dan Templat Lalai

Dalam C , hujah templat merupakan aspek penting dalam bekerja dengan templat kelas dan fungsi. Apabila mengisytiharkan templat kelas dengan hujah templat lalai, kita boleh mengetepikan penentuan hujah semasa mencipta objek, tetapi tingkah laku ini tertakluk kepada pengehadan tertentu.

Untuk menggambarkan, mari kita periksa kod berikut:

<code class="cpp">template <typename T = int>
class Foo {
};</code>

Kod ini mentakrifkan templat kelas Foo dengan hujah templat lalai T = int. Walaupun kita boleh mencipta objek Foo tanpa menyatakan hujah templat secara eksplisit:

<code class="cpp">Foo me;</code>

perlu ambil perhatian bahawa sintaks ini hanya diperkenalkan dalam C 17. Sebelum itu, kod berikut diperlukan:

<code class="cpp">Foo<> me;</code>

Kurungan sudut (<>) menunjukkan bahawa hujah templat hadir tetapi kosong. Sintaks ini diperlukan kerana pengkompil perlu mengetahui jenis T, walaupun ia menggunakan nilai lalai. Kegagalan untuk menyediakan argumen templat, seperti dalam Foo me;, akan mengakibatkan ralat penyusunan.

Perbezaan ini adalah analog kepada fungsi dengan satu argumen lalai. Sama seperti foo tanpa kurungan tidak akan memanggil fungsi, tetapi foo() akan, sintaks hujah templat mesti hadir untuk mencetuskan instantiasi dengan nilai lalai.

Atas ialah kandungan terperinci Mengapa Perlu Menggunakan Kurungan Sudut Kosong untuk Templat Kelas dengan Argumen Lalai dalam C 11 dan Terdahulu?. 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