为什么cpplint会阻止Streams?

时间:2012-10-12 13:26:19

标签: c++ stl coding-style

我只是在玩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]

我很好奇为什么不鼓励使用溪流。

2 个答案:

答案 0 :(得分:15)

流可能导致问题的主要原因是国际化。

每当您需要使用不同语言生成包含动态内容的文本时,事情就会变得很糟糕,因为每种语言都有自己的语法规则。例如,您将使用英语:

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;
}

那太棒了?

因此,当您翻译成法语时,您只需决定将所有这四个句子部分移动到一个表格中,您可以在其中按键查找它们,并且它有效!

然后你发现Polish,从gettext文档中,这里是复数形式的文件 plik ):

  

1 =&gt; plik

     

2,3,4 =&gt; pliki

     

5-21 =&gt; pliko'w

     

22-24 =&gt; pliki

     

25-31 =&gt; pliko'w

嗯......突然间事情变得越来越困难吧?

实际上,它可能会变得更糟。并非所有语言都需要以相同的顺序放置动态条目!

这就是为什么流不能实际用于国际化文本,而不是为每个要显示的文本编写可重载的C ++函数,并让翻译者提供重载!哼声...

两者都有利弊,Google Style Guide非常注重确保一致性。

答案 1 :(得分:4)

这是根据谷歌c ++编码指南检查c ++的吗? 如果是这样,那么原因是谷歌的c ++指南通常被认为有点古怪,并不适用于许多人认为现代c ++的良好实践。