Rumah >pembangunan bahagian belakang >C++ >Mengapakah `stringstream >>` Mengubah 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!