本文为我在深信服组写C++期间总结的部分问题

重难点

1.static

  • 类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致了它仅能访问类的静态数据和静态成员函数
  • 静态数据成员是静态存储的,所以必须对它进行初始化,初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆

    2.const

  • const 是constant的缩写,本意是不变的,不易改变的意思
  • const修饰普通类型的变量时,变量不能被再次赋值
  • const修饰类成员函数可防止成员函数改变类的静态数据
  • 函数前加const是指该函数的返回值是“常量”,不可修改,通常这样的函数返回一个引用(&)或指针。
  • 函数后加const是指该函数不会改变成员变量

const和static不能同时使用,static关键字修饰静态成员函数,不可实例化,而const成员函数不许操作某一实例,与实例相关

3.c++引用传递

传值的本质是:形参是实参的一份复制,传引用的本质是:形参和实参是同一个东西

  • 传值的弊端:如果传入的是一个类或较大的数据类型的话,copy一份值会浪费大量的空间,尤其是传类时,若有复杂的继承关系,对参数进行复制是非常不明智的选择

4.关于指针的值传递和引用传递

1
2
void func_1(int* arr); //指针类型,传值(复制产生新变量)
void func_2(int*& arr); //指针类型,传引用(形参和实参是同一个东西)
  • 如果把指针也当做一种普通数据类型来看可能更好理解,对指针进行值传递时,会复制一个新的指针指向原指针指向的值,依旧可以操作该值,但改变这个指针的指向时,原指针的指向不变;对指针进行引用传递时,改变指针的指向原指针指向也改变。

代码规范

命名规范

  • 静态数据成员的命名应该以s_为前缀
  • 成员变量的命名应该以m_为前缀
  • 全局变量使用g_为前缀
  • 常量使用c_为前缀
  • 指针使用p开头
  • 一般变量命名不使用下划线,采用setGlobalConfig这种命名方式(首字母小写,驼峰命名)
  • 函数动作名称开头,首字母小写,驼峰命名
  • string 统一添加std::命名空间

声明规范

  • 头文件包含顺序:本工程内文件,第三方库头文件,系统头文件,标准库头文件
  • 只在模块内的全局变量应添加static
  • 多次使用的字符串定义为字符串常量(也可使用宏)
  • 头文件中不允许使用 using namespace,避免污染包含者的命名空间
  • 函数注释写在头文件中应说明
    1
    2
    3
    4
    5
    /*
    function: 函数功能
    @param 参数名 参数说明
    @return 返回值 返回值说明
    */

逻辑规范

  • 对外函数,先判断参数合法性,如不合法添加日志记录
  • 类参数使用const引用传递