Rumah > Artikel > pembangunan bahagian belakang > Adakah Membandingkan Lelaran daripada Bekas Berbeza dalam Gelagat Ditakrifkan C?
Membandingkan Iterator daripada Bekas Berbeza dalam C
Dalam konteks pelaksanaan iterator tersuai, persoalan asas timbul: adakah dibenarkan membandingkan iterator daripada bekas yang berbeza? Ambil, sebagai contoh, coretan kod berikut:
<code class="cpp">std::vector<int> foo; std::vector<int> bar; // Is this expression valid? foo.begin() == bar.begin();</code>
Mengikut piawaian C 11:
Iterators dalam Jujukan Yang Sama:
Membandingkan Iterator daripada Bekas Berbeza:
Oleh itu, membandingkan iterator daripada bekas yang berbeza, seperti foo.begin() dan bar.begin() dalam contoh di atas, dianggap tingkah laku tidak ditentukan.
Tingkah laku yang tidak ditentukan ini berpunca daripada fakta bahawa iterator merujuk elemen tertentu dalam bekas. Apabila iterator tergolong dalam bekas yang berbeza, mereka tidak boleh diandaikan menunjuk kepada unsur dalam urutan asas yang sama, oleh itu perbandingan mereka menghasilkan hasil yang tidak ditentukan.
Isu LWG #446:
Untuk menjelaskan isu ini, isu LWG #446 mencadangkan penambahan teks berikut pada standard:
Hasil penilaian secara langsung atau tidak langsung mana-mana fungsi perbandingan atau perduaan - pengendali dengan dua nilai lelaran sebagai argumen yang diperoleh daripada dua julat berbeza... tidak ditentukan, melainkan dinyatakan sebaliknya secara eksplisit.
Tambahan ini lebih menekankan sifat tidak ditentukan untuk membandingkan iterator daripada bekas yang berbeza.
Atas ialah kandungan terperinci Adakah Membandingkan Lelaran daripada Bekas Berbeza dalam Gelagat Ditakrifkan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!