Memahami Ketiadaan Nilai Pulangan dalam std::queue::pop
Dalam C , kelas std::queue menyediakan pop kaedah yang tidak mengembalikan sebarang nilai. Pilihan reka bentuk ini mungkin kelihatan berlawanan dengan intuisi, kerana seseorang mungkin menjangkakan operasi pop akan mengembalikan nilai yang dialih keluar daripada baris gilir. Walau bagaimanapun, terdapat sebab khusus untuk reka bentuk ini.
Pada mulanya, dokumentasi menyatakan bahawa adalah lebih logik untuk pop tidak mengembalikan nilai dan sebaliknya memerlukan pelanggan menggunakan front() untuk mendapatkan nilai di hadapan beratur. Walaupun front() juga memerlukan elemen untuk disalin ke dalam pembolehubah lnilai, perbezaannya terletak pada keselamatan pengecualian.
Dalam kes pengecualian, mengembalikan nilai mengikut nilai, seperti pop perlu lakukan, boleh menjadi tidak selamat . Pertimbangkan senario di mana kaedah pop ditakrifkan seperti berikut:
template<class T> T pop() { auto x = elements[top_position]; --top_position; return x; }
Jika pembina salinan T melemparkan pengecualian apabila kembali, keadaan baris gilir sudah pun diubah, namun elemen itu tidak akan mempunyai telah dikembalikan, dengan berkesan kehilangannya daripada baris gilir. Tingkah laku ini tidak selamat dan tidak cekap jika nilai yang muncul tidak bertujuan untuk digunakan.
Untuk menangani isu ini, std::queue menggunakan pendekatan yang lebih selamat dan lebih cekap dengan mengasingkan operasi kepada void pop dan const T& front (). Ini membolehkan operasi baris gilir yang selamat dan cekap sambil memastikan keselamatan pengecualian dan menghalang penyalinan yang tidak perlu bagi nilai yang tidak digunakan.
Atas ialah kandungan terperinci Mengapa `std::queue::pop` Tidak Mengembalikan Nilai dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!