Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Boleh Mengembalikan `std::unique_ptr` Tanpa `std::move`?

Mengapa Saya Boleh Mengembalikan `std::unique_ptr` Tanpa `std::move`?

Barbara Streisand
Lepaskan: 2024-12-15 19:16:10
asal
417 orang telah melayarinya

Why Can I Return a `std::unique_ptr` Without `std::move`?

Mengapa Mengembalikan std::unique_ptr Tanpa std::move adalah Dibenarkan

Walaupun std::unique_ptr melarang pembinaan salinan, penyata pulangkan yang memaparkan unique_ptrs dikecualikan. Tingkah laku ini sejajar dengan spesifikasi bahasa C, terutamanya klausa 12.8 §34 dan §35.

Apabila syarat tertentu dipenuhi, pelaksanaan mungkin mengetepikan pembinaan salinan/pindah untuk objek kelas. Pengoptimuman ini, yang dikenali sebagai penyingkiran salinan, dibenarkan dalam penyata pulangan untuk jenis pulangan kelas dalam fungsi. Pengecualian terpakai pada ungkapan yang melibatkan objek automatik tidak meruap yang jenisnya sepadan dengan jenis pemulangan fungsi.

Selain itu, apabila penyingkiran salinan berlaku untuk objek lnilai, resolusi beban lampau untuk pembina salinan diteruskan seolah-olah objek itu ditetapkan dengan nilai r.

Penyusun Pelaksanaan

Pengecualian ini dikendalikan dalam pengkompil. Penyusun memanfaatkan spesifikasi bahasa untuk mengenali dan menggunakan teknik penyingkiran, mengoptimumkan kod dengan menghapuskan operasi yang tidak perlu.

Pulangan Nilai Dinamakan

Perlu diperhatikan bahawa pengembalian mengikut nilai ialah pilihan optimum dalam senario sedemikian. Walaupun tanpa penyingkiran, nilai yang dinamakan dalam penyata pulangan dikendalikan sebagai nilai r, menanggung overhed minimum.

Atas ialah kandungan terperinci Mengapa Saya Boleh Mengembalikan `std::unique_ptr` Tanpa `std::move`?. 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