C++ 中的 CV 特性
static
- static 修饰全局函数 / 全局变量,可以让原本具有全局作用域的函数 / 变量, 变成只在文件内有效
- static 修饰局部变量, 改变局部变量的生命周期为整个程序运行周期 (作用域不变), 该变量只初始化一次,之后每次进入它的作用域都可以访问使用; static 局部变量下次再访问还是上次保留的值
- static 修饰类成员变量 / 成员函数,可以让变量 / 函数成为类成员, 而不是实例成员
warning:不要再头文件中声明 static 的全局函数, 不要在 cpp 内声明非 static 的全局函数,如果你要在多个 cpp 中复用该函数, 就把它的声明提到头文件里去,否则 cpp 内部声明需加上 static 修饰;
const
- 修饰变量,阻止变量被修改,const 变量必须在声明时初始化, 否则后面无法初始化了
- 修饰指针,对于指针来说,既可以指定指针本身为 const (顶层 const), 让指针的值不能修改;也可以指定指针指向的值为 const 不能修改 (底层 const); 或者指定两者都是 const
- 修饰形参,表示在函数内部不能修改输入参数的值
- const 成员函数,表示函数内不会修改类的成员变量 (除了 mutable 成员)
- 修饰返回值,表示函数的返回值不能被修改,不是左值
注意第 4 点,const 成员函数不可以修改类的非 mutable 成员变量, 而且 const 成员函数与非 const 成员函数可以重载
const 的类对象只可以调用 const 的类成员函数
1 | class C { |
1 | // 两个dis函数是重载函数! 并不会编译出错, 头一个对象是普通对象, 调用dis函数也是非const版本; |