Menggunakan Kelas Tempatan dengan Algoritma STL: Membongkar Sekatan Jenis Tempatan
Dalam bidang pengaturcaraan C, kelas tempatan telah lama tidak dibenarkan sebagai predikat untuk algoritma STL, menimbulkan persoalan tentang sekatan asas dan rasionalnya.
Piawaian C 98/03 secara eksplisit melarang jenis tempatan sebagai hujah templat, termasuk kelas tempatan. Artikel 14.3.1 piawaian itu dengan jelas menyatakan bahawa "jenis tempatan [...] tidak boleh digunakan sebagai hujah templat untuk parameter jenis templat."
Rasional di sebalik sekatan ini berpunca daripada sementara. sifat jenis tempatan. Memandangkan ia wujud dalam skop yang terhad, kemusnahannya boleh berlaku secara tidak dijangka, yang berpotensi membawa kepada gelagat yang tidak ditentukan apabila digunakan sebagai predikat untuk algoritma STL.
Walau bagaimanapun, dengan kemunculan C 11, sekatan ini telah ditarik balik. Standard yang disemak membenarkan jenis tempatan digunakan sebagai hujah templat, membolehkan kelas tempatan berfungsi sebagai predikat untuk algoritma STL.
Sebagai contoh, pertimbangkan coretan kod berikut:
#include <algorithm> #include <vector> int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::vector<int> v(array, array + 10); struct even { bool operator()(int x) { return !(x % 2); } }; std::remove_if(v.begin(), v.end(), even()); }
Dalam kod ini, kelas tempatan juga mentakrifkan predikat yang menyemak nombor genap. Kelas ini kini boleh digunakan secara langsung sebagai hujah kepada algoritma std::remove_if, yang mengalih keluar semua nombor genap daripada vektor v.
Walaupun sekatan pada jenis tempatan pada mulanya bertujuan untuk melindungi daripada kemungkinan tingkah laku yang tidak ditentukan, penyingkirannya dalam C 11 telah membuka kemungkinan baharu untuk menggunakan kelas tempatan dalam senario pengaturcaraan berfungsi.
Atas ialah kandungan terperinci Bolehkah Kelas Tempatan Akhirnya Digunakan sebagai Predikat untuk Algoritma STL dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!