Есть ли выходной поток помимо Cout в C ++? - PullRequest
2 голосов
/ 06 сентября 2011

В моей книге на C ++ приведен следующий пример относительно cout:

cout << "literals" << "to be" << "printed" ;

Затем он продолжает:

Операторы начинаются с имени выходного потока, cout

Кажется, это подразумевает, что существуют другие потоки. Есть ли другие выходные потоки, кроме cout в C ++? Что они?

Ответы [ 8 ]

7 голосов
/ 06 сентября 2011

Некоторые примеры:

  • Значение std::cerr из <iostream> - стандартный поток ошибок
  • Тип std::fstream тип из <fstream> - потоки ввода и вывода файла
  • Тип std::stringstream из <sstream> - потоки строк
5 голосов
/ 06 сентября 2011

Стандарт C определяет 3 общих файловых дескриптора:

  • стандартный ввод (для ввода пользователем)
  • стандартный вывод (для вывода)
  • stderr (для сообщений об ошибках)

В C ++ они доступны в виде потоков.

  • станд :: CIN
  • станд :: соиЬ
  • станд :: сегг

cin - входной поток. cout и cerr оба являются выходными потоками.

4 голосов
/ 06 сентября 2011

Например, есть cerr, который пишет в стандартную ошибку. Тогда есть любой другой поток, который вы можете создать самостоятельно, например поток файлов, например,

ofstream mystream = ofstream("myfile.txt");
3 голосов
/ 07 сентября 2011

Во-первых, выходной поток - это просто объект класса, который предоставляет поток, который каким-то образом выводит данные куда-то - обычно из библиотеки C ++ IOstream, например, Ostream .

  • std::cout - это запись потока в стандартный вывод
  • std::cerr - запись потока в стандартный канал ошибки

Обычно это то, что вы используете при написании консольных приложений.

Тогда есть

  • файловых потоков для записи в файлы
  • строк строк для построения / изменения строк

См. Эту схему библиотеки IOstream , визуализирующую все потоки c ++ в стандартной библиотеке.

3 голосов
/ 06 сентября 2011

По умолчанию также есть cerr для стандартной ошибки.Вы также можете открыть новые выходные потоки.

2 голосов
/ 06 сентября 2011

Например (из http://www.cplusplus.com/reference/iostream/cout/) есть эти потоки:

cerr     Standard output stream for errors (object )
clog     Standard output stream for logging (object )

Но что вы имеете в виду под "выходным" потоком? «консольный» выходной поток? выводить поток "где угодно"?

С того же сайта (но с другой страницы http://www.cplusplus.com/reference/iostream/cerr/)

По умолчанию большинство систем имеют свои стандартные сообщения об ошибках и вывод в журнал, направленные на консоль, где отображаются текстовые сообщения, хотя обычно это можно перенаправить.

0 голосов
/ 06 сентября 2011

Есть cerr, но это не то же самое, что cout. Он предназначен для вывода ошибок.

Что касается стандартных потоков, то есть разные способы доступа к ним (например, используя stdout / stderr как дескрипторы файлов для fwrite), но в конце дня их всего 2:

stdout - предназначен для стандартного вывода. Состояние программы, полезные данные и прочее. stderr - Предназначен для вывода описания ошибок. Часто также используется для отладки данных.

Иногда фактический вывод будет сделан на stdout, а прогресс или отладка связаны с выводом на stderr. Таким образом, пользователь может направить стандартный вывод в файл и оставить стандартный вывод на консоль. Это позволяет им как собирать нужную информацию, так и видеть прогресс и все такое.

0 голосов
/ 06 сентября 2011

printf - это один из способов сделать это

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

printf ("Hello world");
...