Date:2017年1月22日
参考资料
学习心得
吐槽
C++忘了很多好像,只记得一些与C相似的东西了,有时间补回来;另一方面也是课堂教学的弊病,没有项目经验,又没有特意去研究C++ 的高级特性,对于提高技术水平不利。导致对这份指南有挺多地方不明白的。
学习随笔
- 头文件
目前对我实用的经验有:
- 只有当函数只有 10 行甚至更少时才将其定义为内联函数.
- 使用标准的头文件包含顺序可增强可读性, 避免隐藏依赖:
相关头文件,
C 库,
C++ 库,
其他库的 .h,
本项目内的 .h.
作用域
这部分没有实战经验很难体会
小 tips:将函数变量尽可能置于最小作用域内, 并在变量声明时进行初始化.
int i; i = f(); // 坏——初始化和声明分离 int j = g(); // 好——初始化时声明 vector<int> v; v.push_back(1); // 用花括号初始更好 v.push_back(); vector<int> v = {1, 2}; // 好——v 一开始就初始化
只允许 POD 类型的静态变量,即完全禁用 vector (使用 C 数组替代) 和 string (使用 const char [])。因为会有构造析构顺序不确定造成的bug
类
来自Google的奇技淫巧
cpplint.py 可检查风格错误- 其他C++特性
- 使用 引用参数的时候加上 const
- 使用C++标准的强制类型转换 如 static_cast<>() 而不是C的强制类型转换
- 不使用流而使用 printf(),scanf().
- 对简单数值 (非对象), 两种都无所谓. 对迭代器和模板类型, 使用前置自增 (自减). ++i . 更高效!
- 不使用缺省参数!
- 整数用 , 实数用 0.0, 指针用 nullptr 或 NULL, 字符 (串) 用 ‘\0’
- 尽可能用 sizeof(varname) 代替 sizeof(type).
命名约定
- 全篇都是重点,好习惯
- 最重要的一致性规则是命名管理. 命名风格快速获知名字代表是什么东东: 类型? 变量? 函数? 常量?
- 文件名,全部小写, 建议用 ”_“ 分割
- 类型名称的每个单词首字母均大写, 不包含下划线:MyExcitingClass, MyExcitingEnum
- 变量名一律小写, 单词之间用下划线连接. 类的成员变量以下划线结尾, 但结构体的就不用,如:: a_local_variable, a_struct_data_member, a_class_data_member_
- 常量命名 在全局或类里的常量名称前加 k: kDaysInAWeek. 且除去开头的 k 之外每个单词开头字母均大写。
所有编译时常量, 无论是局部的, 全局的还是类中的, 和其他变量稍微区别一下. k 后接大写字母开头的单词:
const int kDaysInAWeek = 7;
这规则适用于编译时的局部作用域常量,不过要按变量规则来命名也可以。 - 常规函数使用大小写混合, 取值和设值函数则要求与变量名匹配: MyExcitingFunction(), MyExcitingMethod(), my_exciting_member_variable(), set_my_exciting_member_variable().
- 名字空间用小写字母命名, 并基于项目名称和目录结构: google_awesome_project.
- 枚举的命名应当和 常量 或 宏 一致: kEnumName 或是 ENUM_NAME.
注释
- 有趣,很有趣
- 格式
- 空格缩进
- 少留白
- 一致性!
- 规则特例
- 感觉到对Windows的嘲讽2333
进一步提升
核心观点 “风格一致性!”
这是一个很有学问的技巧,我希望再提升C++ 水平的同时,对C++特性有了更好的理解,能够反复回顾、练习这些代码技
巧 。以上所列出的都是我在现有的编程实践中遇到的,随着编程经验的提升,这篇也应该同步更新。