Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Menyalin Objek `stringstream` dalam C ?

Mengapa Saya Tidak Boleh Menyalin Objek `stringstream` dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-18 02:40:11744semak imbas

Why Can't I Copy a `stringstream` Object in C  ?

Mengapa Menyalin Stringstream Dilarang

Menyalin objek rentetan tidak dibenarkan dalam C kerana penswastaan ​​pembina salinannya. Ini terpakai pada semua jenis strim, termasuk aliran rentetan, istream, ostream dan iostream.

Strim bukan bekas yang boleh diduplikasi. Ia berfungsi sebagai saluran yang melaluinya data mengalir, menyambungkan sumber kepada sinki. Tidak seperti bekas, aliran tidak menyimpan data sebaliknya memudahkan penghantarannya.

Pertimbangkan analogi aliran kepada paip yang mengangkut data. Mencipta salinan strim adalah serupa dengan mencipta paip tambahan yang disambungkan ke sumber data yang sama. Walau bagaimanapun, memandangkan data telah digunakan oleh aliran asal, tiada data baharu yang akan diterima oleh salinan.

Untuk menggambarkan:

int main() {
   std::stringstream s1("This is my string.");
   std::stringstream s2 = s1; // error, copying not allowed
}

Dalam contoh ini, cuba untuk salin s1 ke dalam s2 mengakibatkan ralat kerana ia akan mewujudkan sambungan pendua ke sumber data yang telah habis.

Semasa menyalin aliran adalah dilarang, membuat rujukan kepada mereka masih dibenarkan. Ini membenarkan berbilang entiti kod mengakses sumber data asas yang sama tanpa memerlukan pendua.

std::istream  copy_cin = std::cin; //error
std::istream & ref_cin = std::cin; //ok

Selain itu, adalah mungkin untuk mencipta objek strim baharu yang menggunakan penimbal asas yang sama seperti strim sedia ada.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menyalin Objek `stringstream` dalam C ?. 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