Я изучал ввод / вывод от https://www.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.html, что говорит:
Чтобы выполнить ввод и вывод, программа на C ++:
1: создание объекта потока.
2: подключить (связать) объект потока к фактическому устройству ввода-вывода (например, клавиатуре, консоли, файлу, сети, другой программе).
Теперь, чтобы попробовать это, я создал базовую программу:
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int i;
std::streambuf *obj;
obj=cin.rdbuf();
std::istream s_obj(obj);
s_obj>>i;
cout<<i<<endl;
return 0;
}
Я хотел создать что-то самостоятельно, такое же, как cin/cout
, и вышеуказанная программа работает отлично. Я хотел понять:
Я не подключил объект потока s_obj
к какому-либо устройству IO , вместо этого он подключен к буферу istream
, даже тогда я могу правильно подать вход - Как? Как управление буфером для получения ввода с консоли - нужно ли беспокоиться об этом?
Если я присваиваю буфер cin
непосредственно s_obj
, это выдаст ошибку (которую я не очень хорошо понимаю, так как я новичок в C ++), но если это делается либо как то было сделано в вышеприведенном примере или как std::istream s_obj(cin.rdbuf())
, он работает нормально - в чем разница, даже если при инициализации других переменных прямая инициализация и копирование-инициализация работают нормально?