为什么STL / Boost C ++编码风格与其他人不一样呢?

我是一个相当新手的C ++程序员,但是在我对语言有限的经验上,大多数标准的C ++风格指南(例如Google C ++风格指南 )都违背了stl和boost库中的实现。

例如,C ++标准库和Boost中的类名总是小写的,下划线用于分隔单词(例如std::vectorboost::unordered_mapstd::map::const_iterator ),而我见过的大多数风格指南对于C ++倾向于CamelCase风格(例如TcpConnectionInt32 )。

这同样适用于方法。 标准库和Boost对类和方法使用相同的样式(例如std::map<>::get_equal("foo") ),而大多数样式指南主张使用pascalCase或CamelCase。

如果我们将它与Ruby这样的语言进行对比,那么大多数用户将遵循核心库中使用的约定,似乎很奇怪,标准C ++库和其他人的代码之间会有这样的区别。

有人知道为什么吗?

编辑:只是为了澄清,我只是谈论肤浅的文本风格(套pipe,使用下划线等),而不是实际的实施风格。

下划线和小写是Bjarne Stroustrup在“C ++编程语言”中推荐的样式。 如果我没有记错的话,他已经按照这样的方式发表了一个声明:首先要强调名字,因为对于英语不是主要语言的国际社会来说,它更具有可读性。 我不知道他的意见是否真实,但我猜这就是原点。

这里是他的常见问题的链接,他讨论这个话题:

http://www.stroustrup.com/bs_faq2.html#Hungarian

摘录详细解释您感兴趣的内容:

我更喜欢使用下划线来分隔标识符(例如,element_count)中的单词而不是其他选项,如elementCount和ElementCount。 切勿使用所有大写字母的名称(例如,BEGIN_TRANSACTION),因为这通常是为macros保留的。 即使你不使用macros,有人可能已经把他们的头文件乱丢了。 对types使用大写字母(例如,Square和Graph)。 C ++语言和标准库不使用大写字母,所以它是int而不是Int和string而不是String。 这样,你可以识别标准types。

除了Bjarne Stroustrup之外,还有一个很好的理由。 当使用函数时,你希望它们看起来像一个函数。

但是使用CamelCase样式指南,您可以通过在方法名的第一个char上使用Capitals和在方法的第一个char上使用LowerCase来区分类与方法和函数。

这与c ++algorithm风格编程不一致。 由于没有理由区分函数和函数,所以当你想使用函子(通常你想要)时,最好使用c ++和stl编码风格。

唯一需要的规则就是防止已知问题的规则:

  • 使用ALL_CAPS(加下划线和数字)作为预处理器名称,仅用于预处理器名称。 追查(预计的)非预处理器标识符和预处理器名称之间的冲突导致的问题可能很困难,但更难解决。
  • 切勿使用下划线启动标识符,也不要在标识符内部的任何位置使用双下划线。 这些是保留执行。

除此之外,要保持一致,不要太挑剔。 编码标准应该注意规则#0,即“不要小事”。 太多的编码标准让小东西stream汗。

就Google的C ++标准而言,这不是最好的。 这更多的是一个C加或减的标准。 例如,它禁止通过非常量引用。