【C++基础】——const是什么?什么时候用?与宏定义的区别

基础知识:

  1. 引用reference:
    引用:复合类型,相当于变量的另外一个名字,绰号,节省了拷贝带来的内存损耗,在实际程序中,主要用作函数的形式参数;

  2. 类class:
    理解成图纸,不占用内存,包括了成员变量和成员函数。对象是类的实例化,可以看成零件。

  3. 指针pointer:
    指针也是一种变量!指针的内容是地址!

〇、什么是const(必须知道的事情)?

  1. 简单理解:
    const的目的就是定义一个“不会被修改的常量”

  2. 可以修饰:
    变量、引用、指针,可以用于函数参数、成员函数修饰。成员变量。

  3. 作用:
    使用const可以减少代码出错的概率!避免magic number 以及增强程序的可读性。
    这个常量既可以防止程序其他地方不小心修改这个值,也能让程序员比较方便的调整这个值的大小。

  4. 与宏定于#define的区别:
    const有类型,可以进行类型检查,而宏定义没有。

  5. 常量指针和指针常量
    常量指针(指向常量的指针)
    指针常量(地址是常量,指针指向的地址不变

  6. Const值一旦创建后就不能修改,所以const对象必须初始化;

一、const的初始化:

const值一旦创建后就不能修改,所以const对象必须初始化。

const int i=0;//正确
const int i;//错误

const对象可以用非const对象初始化,也可以赋给非const对象,同时也能参与运算,只要初始化后不改变它的值就没问题。

int i;
const int j=i;//正确
int m=j;//正确

二、const的作用域:

默认状态下,const对象仅在文件内有效,不同文件的const对象不是同一个对象

文件之间可以共享的方法:可以使用extern来解决问题。

三、const与引用

const 引用是指向const的引用

  • 对常量的引用必须要用const
const int c=42;

int &r1 = c;      //错误,因为非常量引用可以改变所引用对象,所以这样不合理

const int &r2 = c; //正确,引用与对应的对象都是常量

四、 const与指针:

重要!重要!重要!
对着代码读:

  • 把星号*读作指针,
  • 把const读作常量
  • 非常容易!!!
    比如:
    const int* p就是——常量指针
    int* const p就是——指针常量
  1. 与常量引用相似,指向常量的指针必须要用const指针(指向常量的指针)
const int c=42;

int *r1=&c;      //错误

const int*r2=&c;//正确

*r2=42;//错误,不能给指针所指对象赋值
  1. 常量指针(指向const的指针)和指针常量(const指针)

区分

  • 常量指针(指向常量的指针),只能够读取内存中数据,却不能够修改内存中数据的属性的指针,称为指向常量的指针,简称常量指针。
  • 指针常量(地址是常量,指针指向的位置(地址)不变,指针本身是一个常量,但是指针指向的内容可以改变)

(前两个字作为形容词修饰后两个字。同时大家也要注意const指针这一说法,不要理解成常量指针)

Int num=0;

Int*const cur=#//一直指向num

Const double pi=3.1415;

Const double * const pip=π//指向常量的常量指针。

现在举例子说明一下常量指针域指针常量到底如何区分。

  1. int const* cur; 常量指针,指向常量的指针

2.Const int * cur; 常量指针,指向常量的指针

  1. int*const cur; 指针常量

  2. const(int *) cur; //错误,不可以这么写

辨识小技巧:
对着代码读,把星号读作指针,把const读作常量,非常容易。
Step1: const在星号*的前面,那么就是常量指针——“const前常量指针”
Step2: const在星号*的后面,那么就是指针常量——“const后指针常量”

五、 const与类:

  • const成员变量:
    类中声明变量为const类型。但是不可以初始化,必须要在构造函数初始化列表中初始化。
    这样的变量其实只是在一个对象中是不变的,要想在整个类中都不变就得用enum(枚举)

  • const成员函数:
    这样的成员函数不可以修改数据成员,如果修改成员变量或者调用了其他非const成员函数就会报错。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章