Rumah > pembangunan bahagian belakang > C++ > Mengapakah Pengendalian Kegagalan C Stringstream Berbeza Sebelum dan Selepas C 11?

Mengapakah Pengendalian Kegagalan C Stringstream Berbeza Sebelum dan Selepas C 11?

Mary-Kate Olsen
Lepaskan: 2024-11-25 02:23:29
asal
194 orang telah melayarinya

Why Does C   Stringstream's Failure Handling Differ Before and After C  11?

Kesan Pengendalian Kegagalan terhadap Nilai Sasaran dengan aliran rentetan

Dalam strim C, gelagat pengendalian kegagalan berbeza bergantung pada jenis strim dan versi bahasa. Percanggahan ini ditunjukkan oleh tingkah laku yang tidak dijangka yang diperhatikan apabila membaca perkataan ke dalam pembolehubah integer menggunakan aliran rentetan.

Secara tradisinya, seperti yang dinyatakan dalam TC PL (Edisi Ketiga) Stroustrup, jika operasi input gagal, pembolehubah sasaran harus kekal tidak diubah dalam jenis data tertentu. Walau bagaimanapun, apabila menghadapi ketidakpadanan jenis dalam aliran rentetan, nilai pembolehubah diubah suai, bercanggah dengan petikan yang disebut.

Pengubahsuaian C 11

Punca percanggahan ini terletak pada perubahan yang dilaksanakan dalam C 11. Pra-C 11, aliran rentetan menggunakan penghuraian gaya scanf untuk mengekstrak nombor. Dalam C 11, kaedah ini digantikan dengan fungsi panggilan seperti std::strtoll, yang mengubah suai sasaran sekiranya berlaku kegagalan.

Oleh itu, perubahan dalam strategi penghuraian memperkenalkan gelagat kegagalan yang berbeza. Sebelum C 11, sasaran kekal tidak diubah suai, manakala dalam C 11 dan kemudian, sasaran ditetapkan kepada sifar apabila gagal.

Pengesahan dan Analisis

Untuk mengesahkan teori ini, rujuk rujukan seperti yang disediakan dalam jawapan. Rujukan ini menerangkan bahawa sebelum C 11, kegagalan dalam pengekstrakan menyebabkan nilai tidak diubah suai dan menetapkan failbit. Walau bagaimanapun, dalam C 11 dan seterusnya, kegagalan menghasilkan nilai sifar untuk sasaran dan failbit ditetapkan.

Selain itu, rujukan menyatakan bahawa operator input bergantung pada faset lokal num_get, yang menggunakan fungsi do_get . Dalam C 11, do_get telah diubah suai untuk menggunakan std::strtoll dan fungsi yang serupa, sekali gus menyebabkan perubahan tingkah laku yang diperhatikan.

Atas ialah kandungan terperinci Mengapakah Pengendalian Kegagalan C Stringstream Berbeza Sebelum dan Selepas C 11?. 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