Mengosongkan Stringstream
Kod berikut cuba mengosongkan objek stringstream bernama parser:
<code class="cpp">stringstream parser; parser << 5; short top = 0; parser >> top; parser.str(""); // HERE I'M RESETTING parser parser << 6; // DOESN'T PUT 6 INTO parser short bottom = 0; parser >> bottom;</code>
Walau bagaimanapun, pendekatan ini tidak berfungsi seperti yang diharapkan. Mari jelaskan sebabnya.
Masalah:
Isunya terletak pada cara aliran rentetan mengendalikan bendera akhir fail (eof) dan gagal. Apabila pengekstrakan pertama (>> atas) mencapai penghujung rentetan, ia menetapkan bit eof. Operasi seterusnya pada strim gagal kerana bit eof kekal ditetapkan.
Penyelesaian:
Untuk mengosongkan aliran rentetan dengan betul, kedua-dua turutan asas dan bendera gagal dan eof mesti ditetapkan semula. Kod berikut melakukan ini:
<code class="cpp">parser.str(std::string()); parser.clear();</code>
Kaedah str() menetapkan urutan asas kepada rentetan kosong, manakala kaedah clear() mengosongkan fail fail dan eof.
Dengan ini berubah, kod akan membaca nilai 6 dengan betul ke dalam strim penghurai dan menyimpannya dalam pembolehubah bawah.
Atas ialah kandungan terperinci Mengapakah Menetapkan Semula Stringstream dengan `str(\'\')` Tidak Memadamkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!