Rumah > pembangunan bahagian belakang > C++ > Mengapa `std::queue::pop` Tidak Mengembalikan Nilai dalam C ?

Mengapa `std::queue::pop` Tidak Mengembalikan Nilai dalam C ?

Patricia Arquette
Lepaskan: 2024-11-28 07:27:14
asal
811 orang telah melayarinya

Why Doesn't `std::queue::pop` Return a Value in C  ?

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;
}
Salin selepas log masuk

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!

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