Google C++ Style Guide学习心得

来源:互联网 发布:windows xp 64位原版 编辑:程序博客网 时间:2024/06/05 22:52

Date:2017年1月22日

参考资料

  • 英文版
  • 中文版
    讲道理,我觉得中文版读得有点费劲,很绕。。。或许有其他更好的翻译版本,网上似乎挺多。文中大部分建议都是摘录与于中文版

学习心得

吐槽

C++忘了很多好像,只记得一些与C相似的东西了,有时间补回来;另一方面也是课堂教学的弊病,没有项目经验,又没有特意去研究C++ 的高级特性,对于提高技术水平不利。导致对这份指南有挺多地方不明白的。 

学习随笔

  1. 头文件 
    目前对我实用的经验有:
    • 只有当函数只有 10 行甚至更少时才将其定义为内联函数.
    • 使用标准的头文件包含顺序可增强可读性, 避免隐藏依赖: 
      相关头文件, 
      C 库,
      C++ 库,
      其他库的 .h,
      本项目内的 .h.
  2. 作用域
    这部分没有实战经验很难体会
    小 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

  3. 来自Google的奇技淫巧
    cpplint.py 可检查风格错误

  4. 其他C++特性
    • 使用 引用参数的时候加上 const
    • 使用C++标准的强制类型转换 如 static_cast<>() 而不是C的强制类型转换
    • 不使用流而使用 printf(),scanf().
    • 对简单数值 (非对象), 两种都无所谓. 对迭代器和模板类型, 使用前置自增 (自减). ++i . 更高效!
    • 不使用缺省参数!
    • 整数用 , 实数用 0.0, 指针用 nullptr 或 NULL, 字符 (串) 用 ‘\0’
    • 尽可能用 sizeof(varname) 代替 sizeof(type).
  5. 命名约定

    • 全篇都是重点,好习惯
    • 最重要的一致性规则是命名管理. 命名风格快速获知名字代表是什么东东: 类型? 变量? 函数? 常量?
    • 文件名,全部小写, 建议用 ”_“ 分割 
    • 类型名称的每个单词首字母均大写,  不包含下划线: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.
  6. 注释

    • 有趣,很有趣
  7. 格式
    • 空格缩进
    • 少留白
    • 一致性!
  8. 规则特例
    • 感觉到对Windows的嘲讽2333

进一步提升

核心观点 “风格一致性!”
这是一个很有学问的技巧,我希望再提升C++ 水平的同时,对C++特性有了更好的理解,能够反复回顾、练习这些代码技
巧 。以上所列出的都是我在现有的编程实践中遇到的,随着编程经验的提升,这篇也应该同步更新。

0 0
原创粉丝点击