Rumah > pembangunan bahagian belakang > C++ > Mengapakah Menetapkan Semula Stringstream dengan `str(\'\')` Tidak Memadamkannya?

Mengapakah Menetapkan Semula Stringstream dengan `str(\'\')` Tidak Memadamkannya?

DDD
Lepaskan: 2024-11-04 03:04:30
asal
1062 orang telah melayarinya

Why Doesn't Resetting a Stringstream with `str(

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan