Memahami Sekatan Parameter Templat untuk Jenis Bukan Malar
Dalam C , parameter templat bukan jenis berfungsi untuk tujuan khusus dalam mengawal instantiasi templat. Walau bagaimanapun, adalah penting untuk memahami sebab jenis tertentu, seperti std::string, dilarang sebagai parameter templat bukan jenis.
Menurut piawaian C, parameter templat bukan jenis mestilah ungkapan integral malar (14.1 [temp.param] p4). Ini bermakna mereka tidak boleh menukar nilai mereka semasa masa jalan. Sebaliknya, jenis seperti std::string adalah tidak tetap dan boleh diubah suai.
Sebab sekatan ini terletak pada sifat templat. Templat diproses dan dijadikan instantiated pada masa penyusunan, bermakna tingkah laku mereka ditentukan sebelum program dilaksanakan. Membenarkan parameter templat bukan malar akan menimbulkan kesamaran kerana nilai boleh berubah semasa masa jalan.
Sebagai contoh, dalam coretan kod berikut:
template <std::string temp> void foo() { // ... }
Nilai temp berpotensi berubah semasa pelaksanaan , menjadikannya mustahil untuk menentukan tingkah laku foo() pada masa penyusunan. Ini akan mewujudkan overhed masa jalan dan melemahkan tujuan templat, iaitu untuk meningkatkan kecekapan dengan menjana kod pada masa kompilasi.
Oleh itu, piawaian C mengehadkan parameter templat bukan jenis kepada ungkapan integral yang berterusan, memastikan bahawa nilai mereka kekal malar sepanjang proses penyusunan. Ini membolehkan templat mengoptimumkan penjanaan kod dan mengekalkan tingkah laku yang boleh diramal.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan `std::string` sebagai Parameter Templat Bukan Jenis dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!