Почему потоки в C ++? - PullRequest
       34

Почему потоки в C ++?

8 голосов
/ 30 апреля 2010

Как вы все знаете, есть библиотеки, использующие потоки, такие как iostream и fstream.

Мой вопрос:

  • Почему потоки? Почему они не придерживаются функций, подобных print, fgets и т. Д. (Например)?

Им требуются свои собственные операторы << и >>, но все, что они могут сделать, могут быть реализованы в простых функциях, как указано выше, также в функции

printf("Hello World!");

намного более читабелен и логичен для меня, чем

cout << "Hello World";

Я также думаю, что все эти строковые абстракции в C ++ все компилируются до (менее эффективных) стандартных вызовов функций в двоичном формате.

Ответы [ 14 ]

1 голос
/ 30 апреля 2010

Синтаксис, подобный потоку, с operator<< и operator>> обеспечивает хорошее сцепление.

printf("%d%d%d%d%d", a, b, c, d, e);

против

cout << a << b << c << d << e;

Более того, в первом подходе всегда нужно думать о типе, в то время как в потоковом подходе тип не должен быть указан.

0 голосов
/ 30 апреля 2010

Потоки работают с шаблонами, тогда как printf/scanf нет.

0 голосов
/ 30 апреля 2010

stringstream безопаснее, чем snprintf / sscanf, поскольку полностью исключает возможность переполнения буфера (даже "изящных сбоев").

0 голосов
/ 30 апреля 2010

Я все еще использую printf, главным образом потому, что легко контролировать формат вывода.

Для меня безопасность типов не является здесь главным преимуществом, поскольку ее можно легко определить с помощью теста, учитывая тот факт, что консольную программу гораздо проще тестировать, чем приложения на основе пользовательского интерфейса или веб-приложения. Если вы не выполните тестирование, более серьезные ошибки могут пройти проверку времени компиляции любым способом.

Я также не согласен с другой причиной, по которой поток заявок является более гибким благодаря взаимозаменяемости. Это эквивалентно рекомендовать использовать fprintf (fout, ...) для взаимозаменяемости. Если вам нужно перенаправить вывод, используйте pipe. Если вы находитесь в библиотеке, почему бы вам просто не вернуть строку и позволить вызывающей стороне решить, куда она идет?

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