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++向驼峰样式(如倾向于TcpConnection
或Int32
).
这同样适用于方法.标准库和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.这样,您就可以识别标准类型.
除了Bjarne Stroustrup之外还有一个很好的理由.使用仿函数时,您希望它们看起来像一个函数.
但是使用CamelCase样式指南,您可以在方法的第一个字符串上使用Classes名称和LowerCase的第一个char上的Capitals来区分Classes和Methods and Functions.
这与c ++算法样式编程不一致.由于没有理由将仿函数与函数区分开来,因此当您想要使用仿函数(通常是您想要的)时,最好使用c ++和stl编码样式.
唯一真正需要的规则是那些旨在防止已知问题的规则:
除此之外,要保持一致,不要太挑剔。编码标准应该注意规则#0,即“不要为小事而烦恼”。太多的编码标准都在为小事而烦恼。
就 Google 的 C++ 标准而言,它并不是最好的。它更像是一个 C 加或减标准。例如,它禁止传递非常量引用。