Rumah >pembangunan bahagian belakang >C++ >Mengapakah `Stringstream >>` Sifarkan Pembolehubah Sasaran pada Kegagalan Pengekstrakan dalam C 11 dan Kemudian?

Mengapakah `Stringstream >>` Sifarkan Pembolehubah Sasaran pada Kegagalan Pengekstrakan dalam C 11 dan Kemudian?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 06:16:12648semak imbas

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

Mengapa stringstream >> Menukar Nilai Sasaran pada Kegagalan?

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.

  • Contoh Penjelasan Output
  • Dalam contoh yang disediakan:

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.
  • Tingkah laku ini konsisten dengan tingkah laku >> diperkenalkan dalam C 11.

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!

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