Rumah >pembangunan bahagian belakang >C++ >Mengapakah `stringstream` Mengubah Suai Pembolehubah Sasaran pada Kegagalan Pengekstrakan dalam C 11 dan Kemudian?
Mengapa aliran rentetan >> Ubah Nilai Sasaran pada Kegagalan Pengekstrakan Selepas C 11?
"TC PL" Stroustrup menyatakan bahawa nilai pembolehubah sasaran harus kekal tidak berubah jika operasi istream atau ostream gagal. Walau bagaimanapun, ini bercanggah dengan tingkah laku yang diperhatikan dengan aliran rentetan:
#include <iostream> #include <sstream> int main() { std::stringstream ss; int v = 123; ss > v) { std::cout <p>Kod ini mencetak "Selepas kegagalan pengekstrakan: 0," walaupun terdapat tuntutan Stroustrup.</p> <p><strong>C 11 Pengubahsuaian Tingkah Laku</strong></p> <p>Percanggahan ini berpunca daripada perubahan dalam tingkah laku rentetan selepas C 11. Sebelum C 11, stringstream menggunakan kaedah penghuraian gaya scanf, meninggalkan nilai sasaran tidak berubah apabila gagal. Walau bagaimanapun, sejak C 11, ia menggunakan std::strtoll, yang menulis sifar kepada pembolehubah nilai dan menetapkan failbit pada kegagalan pengekstrakan.</p> <p>Perubahan ini sejajar dengan gelagat C 11 yang disemak bagi operasi istream dan ostream:</p> <ul> <li>Apabila gagal, nilai sasaran ditetapkan kepada 0 atau ekstrem yang sesuai nilai.</li> <li>failbit ditetapkan untuk menunjukkan kegagalan.</li> </ul> <p><strong>Kesimpulan</strong></p> <p>Manakala petikan Stroustrup menerangkan dengan tepat kelakuan operasi istream dan ostream sebelum C 11, tingkah laku pasca-C 11 stringstream menyimpang daripada penerangan ini disebabkan oleh penggunaan mekanisme pengekstrakan yang berbeza. Dalam C 11 dan seterusnya, adalah penting untuk mengetahui tingkah laku yang diubah ini apabila menggunakan operasi aliran rentetan.</p></sstream></iostream>
Atas ialah kandungan terperinci Mengapakah `stringstream` Mengubah Suai Pembolehubah Sasaran pada Kegagalan Pengekstrakan dalam C 11 dan Kemudian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!