Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Kelas Tempatan Akhirnya Digunakan sebagai Predikat untuk Algoritma STL dalam C 11?

Bolehkah Kelas Tempatan Akhirnya Digunakan sebagai Predikat untuk Algoritma STL dalam C 11?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-21 05:04:39572semak imbas

Can Local Classes Finally Be Used as Predicates for STL Algorithms in C  11?

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!

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