Ответ 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 просто очень упрямо, чтобы обеспечить согласованность как можно больше.