const 用法

  1. 定义使初始化

  2. 修饰指针,分别为指向常量的指正和指针常量

  3. 定义const函数形参,函数内部不能修改

  4. 成员函数为常函数,不能修改成员变量

  5. 成员函数返回常对象

  6. 类的成员变量是常量不能声明时初始化,必须构造函数列表进行初始化

  7. 常量引用,用于形参可以避免拷贝和函数对值的修改

    // 类
    class A
    {
    private:

    const int a;                // 常对象成员,只能在初始化列表赋值

    public:

    // 构造函数
    A() : a(0) { };
    A(int x) : a(x) { };        // 初始化列表
    
    // const可用于对重载函数的区分
    int getValue();             // 普通成员函数
    int getValue() const;       // 常成员函数,不得修改类中的任何数据成员的值

    };
    void function()
    {

    // 对象
    A b;                        // 普通对象,可以调用全部成员函数、更新常成员变量
    const A a;                  // 常对象,只能调用常成员函数
    const A *p = &a;            // 常指针
    const A &q = a;             // 常引用
    
    // 指针
    char greeting[] = "Hello";
    char* p1 = greeting;                // 指针变量,指向字符数组变量
    const char* p2 = greeting;          // 指针变量,指向字符数组常量
    char* const p3 = greeting;          // 常指针,指向字符数组变量
    const char* const p4 = greeting;    // 常指针,指向字符数组常量

    }
    // 函数
    void function1(const int Var); // 传递过来的参数在函数内不可变
    void function2(const char* Var); // 参数指针所指内容为常量
    void function3(char* const Var); // 参数指针为常指针
    void function4(const int& Var); // 引用参数在函数内为常量
    // 函数返回值
    const int function5(); // 返回一个常数
    const int* function6(); // 返回一个指向常量的指针变量,使用:const int p = function6();
    int
    const function7(); // 返回一个指向变量的常指针,使用:int* const p = function7();
    // 注意千万不要返回指向局部对象的指针,因为一旦函数结束,局部对象被释放,返回的指针变成了指向一个不再存在的对象的悬垂指针。

const int a; a为常整数 const int *a; a为指向常整数的指针,整数不可修改,指针可以 int * const a; a为指向整数的常指针,整数可以修改,指针不可以修改

如何做到只读

整型数使用常数直接替换对此变量的引用

static用法

  • 1.修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。
  • 2.在模块内,一个声明为静态的变量可以被模块内函数访问,但不能为模块外的其他函数访问,为本地的全局变量
  • 3.修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以将函数定位为 static
  • 4.类内的static成员变量属于整个类拥有,不能在类内定义,只能在类的作用域内定义
  • 5.类内的static成员函数属于整个类,不能包含this指正,只能调用static成员函数
  • 6.修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员

static全局变量与普通的全局变量区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量区别:static局部变量只被初始化一次,下一次依据上一次结果值; static函数与普通函数区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝