C++_basic

const

const 后边的值不可改变
const变量需要在定义时初始化或在初始化列表中赋值

  • const变量默认为文件的局部变量, 因此要在其他文件中访问,必须在文件中显示指定为extern
    • 非const变量在不同文件中的访问(默认为extern)
      1
      2
      3
      4
      file1.cpp
      int ext;
      file2.cpp
      extern int ext;
    • const变量在不同文件中的访问
      1
      2
      3
      4
      file1.cpp
      extern const int ext = 10; // 定义时必须初始化
      file2.cpp
      extern const int ext;
  • const和指针
    • point to const: 指向的对象是const, const在*左边
      • 可以将非const对象或const对象的地址赋给指向const对象的指针,不能通过const对象指针来修改值,可以通过其他的指针来修改
        1
        2
        3
        const int p = 10; or int p = 10;
        const int *ptr;
        ptr = &val;
    • const pointer: 常指针,const在*右边
      • const指针必须进行初始化,且指针的值不能修改
      • const指针不能指向const常量
      • 可以通过非const指针来修改变量的值
        1
        2
        const int num = 0;
        int * const ptr = # // error!! const int* -> int *
    • const指针point to const对象
      const int p = 10; const int * const ptr = &p;
  • const的使用: reference
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    class A
    {
    private:
    const int a; // 常成员变量,只能在初始化列表赋值
    public:
    A(int x = 0) : a(x) {};
    // const可以对重载函数区分
    int getValue(); //普通成员函数
    int getValue() const; // 常成员函数,不得修改类中任何成员的值
    };
    void func()
    {
    // 对象
    A b; // 普通对象,可以调用全部成员函数,更新常成员变量
    const A a; // 常对象,只能调用常成员函数
    const A *p = &a; // 指向常对象的指针
    const A &q = a; // 指向常对象的引用
    // 指针
    char h[] = "hello";
    char* p1 = h; // 指针变量,指向字符串变量
    const char* p2 = h; char const* p2= h; // 指针变量指向常对象
    char* const p3 = h; // 常指针指向变量
    const char* const p4 = h; // 常指针指向常对象
    // 函数
    void f1(const int var); // 传递的参数在函数内不能改变
    void f2(const char* var); // 参数指针所指内容为常量
    void f3(char* const var); // 常指针
    void f4(const int& var); // 引用的参数为常量
    }
    // 函数返回值
    const int f5(); // 返回一个常数, 实际没有什么意义
    const int* f6(); // 返回指向常对象的指针,const int* p = f6();
    int* const f7(); // 返回常指针,int* const p = f7();
0%