C++ const用法

C++ const用法

1. const定义常量,比宏定义常量安全

// 定义常量,有数据类型
const int max = 100;
// 宏定义常量,没有数据类型
#define max 100

2. const修饰的指针变量

  • '*'的变量定义,说明是定义指针变量
  • '*'为界,根据const在'*'的左右侧,区分指针指向的内容是常量,还是指针本身是常量:

    • const在'*'左侧,则其修饰指针指向的内容是常量;
      例如,以下定义b是指向a的指针变量, const在'*'的左侧,则其修饰指针指向的内容是常量。

      int a = 100;
      const int *b = &a; // 指针b指向的内容是常量, *b=200非法
      int const *b = &a; // 等效说明,与const和int的顺序无关
    • const在'*'右侧,则其修饰指针本身是常量
      例如,以下定义b是指向a的指针变量, const在’*’的右侧,则其修饰指针本身是常量。

      int a = 100;
      int *const b = &a; // 指针b本身是常量, b++非法
    • '*'的左右侧均有const,则指针本身和指向的内容均是常量

      int a = 100;
      conat int *const b = &a; // 指针b本身和指向的内容均是常量, *b =200, b++均非法

3. const修饰的变量引用

  • 不可更改的变量引用(变量的别名)

    int a = 100;
    const int &b = a; // const在'&'的左侧, 说明是常量引用, b=200非法 
    int const &b = a; // const同样在'&'的左侧,因此是等效说明,与const和int的顺序无关
  • 不含const的引用定义是可以更改的变量引用(变量的别名)

    int a = 100;
    int &b = a; // b=200,b是a的别名,因此a的值也改为200
  • 不正确的说明形式,禁止使用.

    int a = 100;
    int &const b = a; 
    const int& const b = a;

4. 指针参数传递(地址传递)

  • 指针参数传递即是地址传递,其一般形式:

    void fun(int *a)
    {
    a++; // 合法, 但是不会影响函数外的实参地址
    *a = 100 // 合法, 同时改变函数外实参的值
    }
  • 在函数内不可更改指针参数指向的内容

    // const在'*'的左侧,则其修饰指针指向的内容是常量,因此函数内不可更改指针指向的内容
    void fun(const int *a) 
    { 
      // *a = 100; // 非法
      a++; // 合法,但是不会影响函数外的实参地址
    }
    void fun(int const *a) {  } // 同样const在'*'的左侧,是等效说明
  • 指针参数本身不可更改,但是可以更改指向的内容,并且改变函数外实参的值

    // const在'*'的右侧,则其修饰指针本身是常量,可以更改指向的内容,并且改变函数外实参的值
    void fun(int *const a) 
    { 
      // a++ ; // 非法 
      *a = 100; // 合法, 同时改变函数外实参的值
    }
    int b = 200;
    fun(&b);
    // b 的值变为100

5. C++ 引用参数传递
- 常量传递


void fun(int const &a) { a = 100; // 非法}
void fun(const int &a) { } // 同上

- 引用传递

void fun(int &a) { a = 100; // 合法,同时改变实参的值}

猜你喜欢

转载自blog.csdn.net/weixin_42993054/article/details/82225184