Rumah >pembangunan bahagian belakang >C++ >Mengapakah `stringstream` Mengubah Suai Pembolehubah Sasaran pada Kegagalan Pengekstrakan dalam C 11 dan Kemudian?

Mengapakah `stringstream` Mengubah Suai Pembolehubah Sasaran pada Kegagalan Pengekstrakan dalam C 11 dan Kemudian?

Barbara Streisand
Barbara Streisandasal
2024-11-26 15:46:09597semak imbas

Why Does `stringstream` Modify the Target Variable on Extraction Failure in C  11 and Later?

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!

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