Страницы

Поиск по вопросам

четверг, 12 декабря 2019 г.

Знаки побитового сдвига в потоках ввода/вывода

#cpp #потоки_данных


В C++ есть такие стандартные операторы ввода и вывода:

cin >> x;


и

cout << x;


Какую роль здесь играют знаки побитового сдвига? Зачем их необходимо указывать при
поточном вводе и выводе?
    


Ответы

Ответ 1



Операторы побитового сдвига указывают в какую сторону двигать двоичное число, т.е. применяется к числам. А в контексте потоков они принимают другой смысл потому, что слева уже не число, а поток у которого эти операторы перегружены и значат они << - двигать информацию в поток и >> - двигать информацию из потока.

Ответ 2



Оператор >> или << это всего лишь бинарные операторы, а делать они могут то, что определил программист. Для целых чисел эти операторы делают побитовый сдвиг. Для классов потоков они пределны как "прочитать" или "записать" данные. Я замечал переопределения таких операторов для вектора, чтобы было удобнее добавлять в него элементы. Например в Qt: QVector vec; vec << 1 << 2 << 3; Если вы будете писать свой класс, вы можете переопределить этот оператор, чтобы он делал что угодно. Например складывал параметры. Но это сильно не рекомендуется.

Ответ 3



Вот так решили в с++: вместо определения тривиальных методов с названиями read или write для классов потоков переопределить операции побитового сдвига таким образом, что с побитовым сдвигом они ничего общего не имеют. Красиво жить не запретишь! Польза операций по сравнению с методами, например, в более короткой записи конвейера: поток << "ура, " << "вперед"; Короче, чем гипотетические поток.write("ура, "); поток.write("вперед");

Комментариев нет:

Отправить комментарий