我是一名相当新秀的C ++程序员,但由于我对该语言的经验有限,大多数标准C ++样式指南(例如Google C++ Style Guidelines)都违反了stl和boost库中的实现。
例如,C ++标准库和Boost中的类名总是小写的,下划线分隔单词(例如std::vector
,boost::unordered_map
,std::map::const_iterator
),而大多数样式指南我已经看到C ++倾向于CamelCase风格(例如TcpConnection
或Int32
)。
这同样适用于方法。标准库和Boost使用与方法和函数相同的样式(例如std::map<>::get_equal("foo")
),而大多数样式指南都提倡使用pascalCase或CamelCase。
如果我们将这与像Ruby这样的语言进行对比,大多数用户都会遵循核心库中使用的约定,那么标准C ++库和其他人的代码之间会有这样的差异,这似乎很奇怪。 p>
有谁知道这是为什么?
编辑:只是为了澄清,我只是谈论肤浅的文本风格(套管,使用下划线等)而不是实际的实现风格。
答案 0 :(得分:38)
下划线和小写是Bjarne Stroustrup在“The C ++ Programming Language”中所提供的风格。如果我没记错的话,他已经做了一个声明,强调名字中的下划线是首选,因为对于英语不是主要语言的国际社会来说,它更具可读性。我不知道他的意见是否属实,但我猜这是起源。
以下是他的常见问题解答的链接,他在这里讨论了这个主题:
http://www.stroustrup.com/bs_faq2.html#Hungarian
代码段解释您特别感兴趣的内容:
我更喜欢使用下划线来分隔标识符中的单词(例如element_count),而不是替换元素,例如elementCount和ElementCount。永远不要使用全部大写字母的名称(例如,BEGIN_TRANSACTION),因为它通常是为宏保留的。即使您不使用宏,也可能会有人在您的头文件中乱丢。使用类型的首字母大写字母(例如,Square和Graph)。 C ++语言和标准库不使用大写字母,因此它是int而不是Int和string而不是String。这样,您就可以识别标准类型。
答案 1 :(得分:7)
除了Bjarne Stroustrup之外还有一个很好的理由。使用仿函数时,您希望它们看起来像一个函数。
但是使用CamelCase样式指南,您可以通过在Classes名称的第一个字符上使用Capitals,在方法的第一个char上使用LowerCase来区分Classes和Methods and Functions。
这与c ++算法样式编程不一致。由于没有理由将函子与函数区分开来,所以当你想使用函子时(通常你想要),最好使用c ++和stl编码样式。
答案 2 :(得分:1)
真正需要的唯一规则是那些旨在防止已知问题的规则:
除此之外,要保持一致,不要太挑剔。编码标准应该注意规则#0,即“不要让小东西流汗”。很多编码标准都会让这些小东西大汗淋漓。
就Google的C ++标准而言,它并不是最好的。它更像是C加或减标准。例如,它禁止通过非常量引用传递。