Rumah >pembangunan bahagian belakang >C++ >Mengapakah `Stringstream >>` Sifarkan Pembolehubah Sasaran pada Kegagalan Pengekstrakan dalam C 11 dan Kemudian?
>` Sifarkan Pembolehubah Sasaran pada Kegagalan Pengekstrakan dalam C 11 dan Kemudian? " />
Dalam petikan yang dipetik daripada Stroustrup "TC PL, Edisi Ke-3," pengarang menyatakan bahawa nilai daripada v harus kekal tidak berubah jika operasi pengekstrakan gagal Walau bagaimanapun, satu contoh bercanggah dengan kenyataan ini, kerana v akan disifarkan apabila aliran rentetan Operasi v gagal dan selepas C 11.
Sebelum C 11
Sebelum C 11, >> menggunakan mekanisme penghuraian gaya scanf Apabila pengekstrakan gagal, nilai v tidak berubah dan menetapkan bendera failbit.
Sejak C 11
Dengan C 11, >> bertukar kepada menggunakan facet std::num_get untuk menghurai input Seperti spesifikasi yang dikemas kini, jika pengekstrakan gagal:
Untuk jenis asas seperti int, 0 ditulis kepada v dan failbit. bendera ditetapkan.
Untuk jenis dengan perlindungan limpahan, seperti std::numeric_limits::max() atau std::numeric_limits::min() ditulis kepada v dan bendera failbit ditetapkan.Nilai v ialah pada mulanya 123.
Selepas cuba membaca perkataan ke dalam v (yang gagal), nilai v ditetapkan kepada 0.Keadaan rdstream() rentetan menunjukkan failbit ditetapkan, mengesahkan kegagalan pengekstrakan.Atas ialah kandungan terperinci Mengapakah `Stringstream >>` Sifarkan Pembolehubah Sasaran pada Kegagalan Pengekstrakan dalam C 11 dan Kemudian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!