权威的C++规范以Google为主,以下自我学习过程中的总结。
变量命名
小驼峰、大驼峰命名法
小驼峰,第一个单词首字母小写,后面其他单词首字母大写。例如 int myAge;
大驼峰法把第一个单词的首字母也大写了。例如:int MyAge;
通常来讲 java和go都使用驼峰,C++的函数和结构体命名也是用大驼峰。
下划线命名法
下划线命名法是名称中的每一个逻辑断点都用一个下划线来标记,例如:int my_age,下划线命名法是随着C语言的出现流行起来的,如果大家看过UNIX高级编程或者UNIX网络编程,就会发现大量使用这种命名方式。
匈牙利命名法
匈牙利命名法是:变量名 = 属性 + 类型 + 对象描述,例如:int iMyAge,这种命名是一个来此匈牙利的程序员在微软内部推广起来,然后推广给了全世界的Windows开发人员。
这种命名方式在没有IDE的时代,可以很好的提醒开发人员遍历的意义,例如看到iMyAge,就知道它是一个int型的变量,而不用找它的定义,缺点是一旦改变变量的属性,那么整个项目里这个变量名字都要改动,所以带来代码维护困难。
目前IDE已经很发达了,都不用标记变量属性了,IDE就会帮我们识别了,所以基本没人用匈牙利命名法了。
空格规范
- 操作符左右一定有空格,例如
i = i + 1;
- 分隔符(, 和;)前一位没有空格,后一位保持空格,例如:
int i, j;
、for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++)
- 大括号和函数保持同一行,并有一个空格例如:
while (n) {
n--;
}
- 控制语句(while,if,for)后都有一个空格,例如:
while (n) {
if (k > 0) return 9;
n--;
}
- 整体风格
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {
if (nums[fastIndex] != 0) {
nums[slowIndex++] = nums[fastIndex];
}
}
for (int i = slowIndex; i < nums.size(); i++) {
nums[i] = 0;
}
}
};
5.17 0, nullptr, NULL
- 整数用0,实数用0.0,指针用nullptr或NULL,字符(串)用’\0’。
整数用 0, 实数用 0.0, 这一点是毫无争议的.
对于指针 (地址值), 到底是用 0, NULL 还是 nullptr. C++11
项目用 nullptr; C++03 项目则用 NULL, 毕竟它 看起来像指针。实际上,一些 C++ 编译器对 NULL
的定义比较特殊,可以输出有用的警告,特别是 sizeof(NULL) 就和 sizeof(0) 不一样。字符 (串) 用 ‘\0’,不仅类型正确而且可读性好.