Rumah > pembangunan bahagian belakang > C++ > Adakah Membandingkan Lelaran daripada Bekas Berbeza Kelakuan Tidak Ditakrifkan?

Adakah Membandingkan Lelaran daripada Bekas Berbeza Kelakuan Tidak Ditakrifkan?

Susan Sarandon
Lepaskan: 2024-11-02 17:53:29
asal
602 orang telah melayarinya

Is Comparing Iterators from Different Containers Undefined Behavior?

Membandingkan Iterator daripada Bekas Berbeza: Menjelaskan Gelagat Tidak Ditakrifkan

Apabila bekerja dengan iterator dalam C , adalah penting untuk memahami batasan membandingkan iterator daripada bekas yang berbeza. Artikel ini menyelidiki persoalan sama ada ungkapan foo.begin() == bar.begin() menghasilkan gelagat palsu atau tidak ditentukan, dengan foo dan bar adalah dua bekas vektor std:: yang berasingan.

Menurut C 11 standard (n3337), iterator dari bekas yang berbeza tidak boleh dibandingkan secara langsung. Bahagian 24.2.5 menyatakan bahawa domain pengendali kesamaan == untuk iterator ke hadapan hanya ditakrifkan untuk iterator pada urutan asas yang sama. Memandangkan bekas yang berbeza dianggap urutan yang berasingan, membandingkan iterator daripadanya ialah gelagat yang tidak ditentukan.

Selain itu, isu LWG #446 secara khusus menangani soalan ini. Cadangan ini bertujuan untuk menambah teks eksplisit pada standard yang menjelaskan bahawa membandingkan iterator daripada julat yang berbeza, melainkan ditakrifkan sebaliknya secara eksplisit, adalah tidak ditentukan. Ini menekankan bahawa walaupun secara tidak langsung membandingkan iterator daripada julat yang berbeza, seperti menggunakan fungsi seperti std::find, boleh mengakibatkan gelagat tidak ditentukan.

Oleh itu, adalah penting untuk mengelak daripada membandingkan iterator daripada bekas atau subjulat berbeza bagi bekas yang berbeza. Melakukannya boleh membawa kepada hasil yang tidak dapat diramalkan dan harus dielakkan dalam amalan kod yang teguh.

Atas ialah kandungan terperinci Adakah Membandingkan Lelaran daripada Bekas Berbeza Kelakuan Tidak Ditakrifkan?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan