Rumah >pembangunan bahagian belakang >C++ >Mengapa Rentetan Tidak Boleh Digunakan sebagai Parameter Templat Bukan Jenis dalam C ?

Mengapa Rentetan Tidak Boleh Digunakan sebagai Parameter Templat Bukan Jenis dalam C ?

Linda Hamilton
Linda Hamiltonasal
2024-12-13 16:28:13345semak imbas

Why Can't Strings Be Used as Non-Type Template Parameters in C  ?

Mengapa Parameter Templat Bukan Jenis Tidak Boleh Menjadi Rentetan?

Dalam C , parameter templat bukan jenis mestilah ungkapan kamiran tetap. Walau bagaimanapun, kod di bawah cuba menggunakan std::string sebagai parameter templat bukan jenis:

template <std::string temp>
void foo()
{
     // ...
}

Ini mengakibatkan ralat pengkompil yang menunjukkan bahawa std::string ialah jenis haram untuk bukan- taip parameter templat.

Sebab sekatan ini ialah ungkapan tidak tetap tidak boleh dihuraikan dan digantikan semasa penyusunan. Mereka boleh berubah semasa masa jalan, yang memerlukan penjanaan templat baharu semasa masa jalan. Memandangkan templat ialah konsep masa kompilasi, ini tidak boleh dilakukan.

Piawaian C 11 secara eksplisit membenarkan hanya jenis tertentu untuk parameter templat bukan jenis:

  • Jenis bersepadu atau penghitungan
  • Penunjuk kepada objek atau fungsi
  • Rujukan nilai kepada objek atau fungsi
  • Petunjuk kepada ahli
  • std::nullptr_t

Atas ialah kandungan terperinci Mengapa Rentetan Tidak Boleh Digunakan sebagai Parameter Templat Bukan Jenis 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