Почему cpplint препятствует потокам?

Я просто играл с cpplint и пытался запустить его на каком-то коде, который я написал для удовольствия. Я понял, что в сообщение об ошибке были помечены следующие строки: -

#include <iostream>
...
#include <fstream>

yoohoo.cpp:3:  Streams are highly discouraged.  [readability/streams] [3]
yoohoo.cpp:5:  Streams are highly discouraged.  [readability/streams] [3]

Мне интересно, почему использование потоков не рекомендуется.

Ответы

Ответ 1

Основная причина, по которой потоки могут вызвать проблему, - интернационализация.

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

void print(std::ostream& out, int i) {
    out << "You retrieved ";
    switch(i) {
    case 0: out << "no file."; return;
    case 1: out << "1 file."; return;
    default: out << i << " files." return;
}

И это великое право?

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

И затем вы обнаружите польский, из документации gettext, вот несколько форм файла (plik):

1 = > plik

2,3,4 = > pliki

5-21 = > pliko'w

22-24 = > pliki

25-31 = > pliko'w

Хум... внезапно все становится трудным, верно?

На самом деле это может ухудшиться. Не все языки должны размещать ваши динамические записи в одном порядке!

Вот почему потоки фактически не могут использоваться для интернационализированного текста, не записывая перегружаемую функцию С++ для каждого отображаемого текста, а переводчики обеспечивают перегрузки! Hum...

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

Ответ 2

Это тот, который проверяет С++ на соответствие правилам кодирования google С++? Если это так, то причина в том, что рекомендации google С++ обычно считаются несколько эксцентричными и не совсем применимы к тому, что многие считают хорошей практикой для современного С++.