Rumah > pembangunan bahagian belakang > C++ > Mengapakah `stringstream >>` Sifar Pembolehubah Saya pada Kegagalan Pengekstrakan dalam C 11?

Mengapakah `stringstream >>` Sifar Pembolehubah Saya pada Kegagalan Pengekstrakan dalam C 11?

Patricia Arquette
Lepaskan: 2024-11-26 12:57:11
asal
647 orang telah melayarinya

Why Does `stringstream >>` Sifarkan Pembolehubah Saya pada Kegagalan Pengekstrakan dalam C 11?
>` Sifarkan Pembolehubah Saya pada Kegagalan Pengekstrakan dalam C 11? " />

Mengapa Stringstream >> Menukar Nilai Sasaran pada Kegagalan?

Dalam C moden (C 11 dan seterusnya), tingkah laku >> ; operator untuk aliran rentetan apabila pengekstrakan gagal telah berubah daripada versi terdahulu Seperti standard C 11, apabila gagal, pembolehubah sasaran ditetapkan kepada lalai nilai (biasanya sifar untuk integer), dan bendera failbit ditetapkan.

Sebelum C 11, tingkah laku adalah berbeza Menurut petikan Stroustrup daripada "TC PL, Edisi Ke-3," apabila pembolehubah sasaran gagal harus kekal tidak berubah Walau bagaimanapun, contoh kod yang disediakan menunjukkan percanggahan, di mana pembolehubah sasaran v disifarkan selepas pengekstrakan yang gagal percubaan.

Tingkah laku bercanggah yang jelas ini boleh dijelaskan oleh fakta bahawa coretan sedang disusun di bawah mod C 11, yang mengubah tingkah laku pengendali >> 🎜>Jika pengekstrakan gagal disebabkan oleh jenis data yang tidak sah (cth., cuba membaca perkataan menjadi integer), pembolehubah sasaran kekal tidak diubah suai dan bendera failbit ditetapkan.

    Jika pengekstrakan gagal kerana nilai terlalu besar atau terlalu kecil untuk jenis sasaran, nilai maksimum atau minimum yang mungkin (cth., std::numeric_limits::max() untuk integer) ditulis kepada pembolehubah, dan bendera failbit ditetapkan.
  • Dalam kod contoh, aliran rentetan mengandungi rentetan yang tidak boleh ditukar kepada integer, mengakibatkan kegagalan penghuraian. Di bawah mod C 11, kegagalan ini menyebabkan v ditetapkan kepada 0, seperti yang diperhatikan dalam output. Bendera failbit juga ditetapkan, seperti yang ditunjukkan oleh mesej "state: failbit".
Perubahan dalam tingkah laku ini diperkenalkan dengan C 11 untuk memastikan konsistensi dalam mengendalikan kegagalan pengekstrakan untuk pengekstrak aliran. Ia sejajar dengan prinsip umum bahawa pengekstrak aliran tidak boleh mengubah suai pembolehubah sasaran (jika boleh) sekiranya berlaku kegagalan.

Atas ialah kandungan terperinci Mengapakah `stringstream >>` Sifar Pembolehubah Saya pada Kegagalan Pengekstrakan dalam 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