Rumah > pembangunan bahagian belakang > C++ > Mengapakah `stringstream >>` Mengubah Suai Nilai Pembolehubah pada Kegagalan Pengekstrakan?

Mengapakah `stringstream >>` Mengubah Suai Nilai Pembolehubah pada Kegagalan Pengekstrakan?

Barbara Streisand
Lepaskan: 2024-11-27 05:02:21
asal
495 orang telah melayarinya

Why Does `stringstream >>` Ubah suai Nilai Pembolehubah pada Kegagalan Pengekstrakan?
>` Ubah suai Nilai Pembolehubah pada Kegagalan Pengekstrakan? " />

Tingkah Laku Tidak Konsisten Stringstream >> pada Pengubahsuaian Nilai pada Kegagalan

Seperti yang dinyatakan oleh Stroustrup dalam TC PL, Edisi Ke-3, Bahagian 21.3.3, nilai pembolehubah harus kekal tidak berubah apabila operasi membaca yang tidak berjaya Walau bagaimanapun, a tingkah laku pelik berlaku apabila menggunakan aliran rentetan >> dengan jenis data tidak sepadan.

Dalam coretan kod yang dibentangkan, pembolehubah integer v dimulakan dengan 123. Apabila cuba membaca perkataan ke dalam integer ini menggunakan aliran rentetan >>, nilai v menjadi sifar walaupun jangkaan pengekalan nilai asalnya.

Ini percanggahan jelas diselesaikan dengan penjelasan dalam piawaian C 11 Sebelum ini, apabila pengekstrakan gagal, nilai kekal tidak berubah dan failbit telah ditetapkan Walau bagaimanapun, dalam C 11, sifar kini ditulis kepada pembolehubah, dan failbit masih set.

Punca tingkah laku yang diubah ini terletak pada perubahan daripada penghuraian input gaya std::scanf kepada penggunaan std::strtoll dan fungsi serupa dalam C 11. Fungsi ini mengendalikan penukaran berangka dengan cara yang berbeza, mengakibatkan pengubahsuaian v pada kegagalan pengekstrakan.

Atas ialah kandungan terperinci Mengapakah `stringstream >>` Mengubah Suai Nilai Pembolehubah pada Kegagalan Pengekstrakan?. 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