Rumah > pembangunan bahagian belakang > C++ > Adakah Pelaksanaan Salin Atas Tulis `std::string` Sah dalam C 11?

Adakah Pelaksanaan Salin Atas Tulis `std::string` Sah dalam C 11?

Patricia Arquette
Lepaskan: 2024-12-15 03:28:08
asal
909 orang telah melayarinya

Is a Copy-on-Write Implementation of `std::string` Legal in C  11?

Pelaksanaan std::string dalam C 11: Legaliti dan Sekatan

Copy-on-write (COW) adalah teknik yang sering digunakan untuk meningkatkan prestasi dengan menangguhkan kos mencipta objek baharu sehingga ia benar-benar diubah suai. Walau bagaimanapun, ia telah dipersoalkan sama ada COW adalah pendekatan yang sah untuk melaksanakan std::string dalam C 11.

Sekatan terhadap Pelaksanaan LEMBU

Mengikut standard C 11 (21.4.1 p6), pembatalan iterator dan rujukan hanya dibenarkan dalam keadaan:

  • Apabila diserahkan sebagai hujah kepada fungsi perpustakaan standard yang mengambil rujukan kepada rentetan_basikal bukan const.
  • Apabila memanggil fungsi bukan ahli tetap, tidak termasuk operator[], di, depan, belakang, mula, mulakan, tamatkan dan pecahkan.

Untuk pelaksanaan rentetan LEMBU, menggunakan pengendali bukan const[] akan memerlukan membuat salinan dan rujukan yang tidak sah. Ini dilarang oleh perenggan yang disebutkan di atas. Akibatnya, melaksanakan std::string berdasarkan COW tidak lagi dianggap sah dalam C 11.

Pernyataan Sekatan Eksplisit

Standard tidak menyatakan secara eksplisit bahawa Pelaksanaan std::string berasaskan COW adalah dilarang. Walau bagaimanapun, sekatan itu tersirat oleh gabungan keperluan yang mengehadkan senario ketidaksahihan secara eksplisit.

Kesimpulan

Sementara COW merupakan pelaksanaan yang berdaya maju untuk std::string dalam versi terdahulu daripada C , spesifikasi C 11 memperkenalkan kekangan yang melarang pelaksanaan berasaskan COW disebabkan oleh tidak dibenarkan pembatalan rujukan.

Atas ialah kandungan terperinci Adakah Pelaksanaan Salin Atas Tulis `std::string` Sah dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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