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
Barbara Streisandasal
2024-11-27 05:02:21478semak imbas

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:
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