#cpp #потоки_данных
В C++ есть такие стандартные операторы ввода и вывода: cin >> x; и cout << x; Какую роль здесь играют знаки побитового сдвига? Зачем их необходимо указывать при поточном вводе и выводе?
Ответы
Ответ 1
Операторы побитового сдвига указывают в какую сторону двигать двоичное число, т.е. применяется к числам. А в контексте потоков они принимают другой смысл потому, что слева уже не число, а поток у которого эти операторы перегружены и значат они << - двигать информацию в поток и >> - двигать информацию из потока.Ответ 2
Оператор >> или << это всего лишь бинарные операторы, а делать они могут то, что определил программист. Для целых чисел эти операторы делают побитовый сдвиг. Для классов потоков они пределны как "прочитать" или "записать" данные. Я замечал переопределения таких операторов для вектора, чтобы было удобнее добавлять в него элементы. Например в Qt: QVectorvec; vec << 1 << 2 << 3; Если вы будете писать свой класс, вы можете переопределить этот оператор, чтобы он делал что угодно. Например складывал параметры. Но это сильно не рекомендуется. Ответ 3
Вот так решили в с++: вместо определения тривиальных методов с названиями read или write для классов потоков переопределить операции побитового сдвига таким образом, что с побитовым сдвигом они ничего общего не имеют. Красиво жить не запретишь! Польза операций по сравнению с методами, например, в более короткой записи конвейера: поток << "ура, " << "вперед"; Короче, чем гипотетические поток.write("ура, "); поток.write("вперед");
Комментариев нет:
Отправить комментарий