【C++语言】全面掌握const的用法

一、const 需要怎么理解??

       const修饰的变量不能够再作为左值,初始化完成之后,值不能被修改

1.1 C语言的const

const 修饰的量,可以不用初始化,不叫常量,叫做常变量。

void main()
{
    const int a = 20;
    
    int *p = (int*) &a;
    *p = 30;
    // 30 30 30
    printf("%d %d %d\n", a, *p, *(&a));
    return 0; 
}

1.2 C++语言的const

 必须初始化,叫做常量,如果初始值不是一个立即数,叫做常变量,是一个变量。

1.3 C和C++中const的区别是什么??

       const的编译方式不同,在C中,const就是当做一个变量来编译生成指令的,C++中所有出现const常量的名字的地址,都被常量的初始化替换了。

二、const 和一级指针的结合 && const和二级指针的结合

2.1 const 修饰的量叫做常量,普通变量的区别是什么??

       C++中有两点区别:1.编译方式不同  2. 不能作为左值了,

2.2 const 修饰的量尝出现的错误是:        

  • 常量不能再作为左值,直接修改常量的值
  • 不能把常量的地址泄露给一个普通的指针或者普通的引用变量 可以借鉴修改常量的值

2.3 const 和一级指针的结合

C++的语言规范:const 修饰的是离他最近的类型

总结const和指针的类型转换公式:

       这里需要注意一下:const 如果右边没有指针* 的话,const 是不参与类型的。测试代码如下:

int *q1 = nullptr;
int *const q2 = nullptr;

cout << typeid(q1).name() << endl;
cout << typeid(q2).name() << endl;

///
答案:

int *
int *

2.4 const 和二级指针的结合

永远只有一级指针,剩下的就是指针的类型.

猜你喜欢

转载自blog.csdn.net/2301_77868664/article/details/143138454