Mengapa Kelas Tempatan Tidak Boleh Digunakan sebagai Predikat dalam Algoritma STL (C 98/03)?

DDD
Lepaskan: 2024-11-22 10:16:10
asal
668 orang telah melayarinya

Why Can't Local Classes Be Used as Predicates in STL Algorithms (C  98/03)?

Enigma Kelas Tempatan dalam Algoritma STL

Walaupun ungkapan lambda digunakan secara meluas sebagai predikat dalam algoritma STL, kelas tempatan nampaknya misteri dikecualikan daripada utiliti ini. Dalam soalan ini, kami berusaha untuk merungkai sekatan mandat standard yang melarang jenis tempatan daripada mengambil bahagian dalam algoritma STL sebagai predikat.

Larangan Standard

Ketiadaan tempatan kelas sebagai jenis predikat dalam algoritma STL berpunca daripada larangan eksplisit yang dikenakan oleh C 98/03 standard, seperti yang dinyatakan dalam artikel C 03 14.3.1:

"Jenis tempatan, jenis tanpa kaitan, jenis yang tidak dinamakan atau jenis yang dikompaun daripada mana-mana jenis ini tidak boleh digunakan sebagai templat- hujah untuk parameter jenis templat."

Sekatan ini ditunjukkan dalam kod pembenderaan pengkompil seperti contoh yang diberikan, di mana struct setempat tidak boleh digunakan sebagai predikat untuk std::remove_if.

Rasional untuk Sekatan

Rasional untuk pengecualian ini diselubungi dengan tekaan. Sesetengah membuat spekulasi bahawa ia adalah satu kesilapan, manakala yang lain percaya ia bertujuan untuk menghalang definisi jenis ad-hoc dan berkemungkinan mengelirukan dalam algoritma.

Evolusi dalam C 11

Mujurlah, piawaian C 11 membetulkan isu ini, menarik balik sekatan pada jenis tempatan sebagai hujah templat. Akibatnya, penyusun kontemporari biasanya membenarkan penggunaan kelas tempatan sebagai predikat dalam algoritma STL.

Kesimpulan

Walaupun larangan asal pada kelas tempatan merupakan sumber kekecewaan, ia penyingkiran dalam C 11 telah membuka jalan baharu untuk menggunakan jenis tempatan dalam algoritma STL. Hari ini, ekspresi lambda dan kelas tempatan wujud bersama sebagai pilihan predikat yang berkesan, memberikan pembangun alat serba boleh untuk manipulasi algoritma.

Atas ialah kandungan terperinci Mengapa Kelas Tempatan Tidak Boleh Digunakan sebagai Predikat dalam Algoritma STL (C 98/03)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan