Инициализация объекта потока C ++ и подключение его к консолям / источникам ввода / вывода - PullRequest
0 голосов
/ 26 января 2019

Я изучал ввод / вывод от 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, и вышеуказанная программа работает отлично. Я хотел понять:

  1. Я не подключил объект потока s_obj к какому-либо устройству IO , вместо этого он подключен к буферу istream, даже тогда я могу правильно подать вход - Как? Как управление буфером для получения ввода с консоли - нужно ли беспокоиться об этом?

  2. Если я присваиваю буфер cin непосредственно s_obj, это выдаст ошибку (которую я не очень хорошо понимаю, так как я новичок в C ++), но если это делается либо как то было сделано в вышеприведенном примере или как std::istream s_obj(cin.rdbuf()), он работает нормально - в чем разница, даже если при инициализации других переменных прямая инициализация и копирование-инициализация работают нормально?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...