为什么STL/Boost C++编码风格与众不同?

Kar*_*oll 63 c++ coding-style naming-conventions

我是一名相当新秀的C++程序员,但由于我对该语言的经验有限,大多数标准C++风格指南(例如Google C++样式指南)都与stl和boost库中实现的内容相悖.

例如,在C++标准库和升压类名称总是小写,用下划线分隔的话(例如std::vector,boost::unordered_map,std::map::const_iterator),而多数风格指南我已经看到了C++向驼峰样式(如倾向于TcpConnectionInt32).

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

如果我们将这与像Ruby这样的语言形成对比,大多数用户都会遵循核心库中使用的约定,那么标准C++库和其他人的代码之间会有这样的差异,这似乎很奇怪.

有人知道为什么吗?

编辑:只是为了澄清,我只是简单地谈论肤浅的文本风格(套管,使用下划线等)而不是实际的实现风格.

Kev*_*vin 38

下划线和小写是Bjarne Stroustrup在"C++编程语言"中所提供的风格.如果我没记错的话,他已经做了一个声明,强调名字中的下划线是首选,因为对于英语不是主要语言的国际社会来说,它更具可读性.我不知道他的意见是否真实,但我猜这是起源.

这是他的常见问题解答的链接,他在这里讨论了这个主题:

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

片段解释您特别感兴趣的内容:

我更喜欢使用下划线来分隔标识符中的单词(例如,element_count)而不是替代项,例如elementCount和ElementCount.永远不要使用带有大写字母的名称(例如,BEGIN_TRANSACTION),因为它通常是为宏保留的.即使您不使用宏,也可能会有人在您的头文件中乱丢.使用类型的首字母大写字母(例如,Square和Graph).C++语言和标准库不使用大写字母,因此它是int而不是Int和string而不是String.这样,您就可以识别标准类型.


gee*_*kpp 7

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

但是使用CamelCase样式指南,您可以在方法的第一个字符串上使用Classes名称和LowerCase的第一个char上的Capitals来区分Classes和Methods and Functions.

这与c ++算法样式编程不一致.由于没有理由将仿函数与函数区分开来,因此当您想要使用仿函数(通常是您想要的)时,最好使用c ++和stl编码样式.


Dav*_*men 5

唯一真正需要的规则是那些旨在防止已知问题的规则:

  • 对预处理器名称使用 ALL_CAPS(加下划线和数字),并且仅适用于预处理器名称。追查由(假定的)非预处理器标识符和预处理器名称之间的冲突引起的问题可能很困难,更难修复它们。
  • 切勿以下划线开头标识符,并且标识符内的任何位置都不要有双下划线。这些是为实施而保留的。

除此之外,要保持一致,不要太挑剔。编码标准应该注意规则#0,即“不要为小事而烦恼”。太多的编码标准都在为小事而烦恼。

就 Google 的 C++ 标准而言,它并不是最好的。它更像是一个 C 加或减标准。例如,它禁止传递非常量引用。