C++与const的结合

本文详细探讨了C和C++中const关键字的使用,涉及const与变量、数组、指针的关系,以及常量引用的规则,强调了不同场景下的兼容性和安全性问题。
摘要由CSDN通过智能技术生成

const与指针

c语言中const使用

c语言中const以变量为主 即上面定义中const定义的值不能改变 在下面数组的定义中 n仍为变量,并不能成功定义

 int main(){
     const int n = 10;
     int ar[n] = {1,2};//error
     int *p = (int*)&n;
     *p = 100;
     printf("n = %d *p = %d \n",n,*p);
 }
 int main() {
     const int a = 10;
     int b = 0;
     int* ap = (int*)&a;
     *ap = 100;
     b = a;
     return 0;
     // 结果 a = 100 b  = 100 *ap = 100
 }
 

c++中const的使用

c++中const定义后直接当做宏定义使用,即为常变量

 int main() {
     const int a = 10;//直接把他当做宏定义的常变量 后续的a先换成10 在进行其余变化
     int b = 0;
     int* ap = (int*)&a;
     *ap = 100;
     b = a;// b = 10;
     return 0;
     // 结果 a = 10 b  = 10 *ap = 100
 }
 ​
 int main() {
     const int n = 10;
     int ar[n] = { 1,2,3 };//c++中认为其为常量
 }

const与指针相结合

p3 指针变量自身为常性 p4 指向(解引用)和指针变量本身都为常性

 int main() {
     int a = 10, b = 20;
     int* p1 = &a;
     const int* p2 = &a;//p2 p22 相同 *p2 -=100;//error
     //int const* p22 = &a;
     int* const p3 = &a;//p3 = &b;//error
     const int* const p4 = &a;
 }

常变量与指针

 int main() {
     const int a = 10;
     int* p1 = &a;//error
     const int* p2 = &a;//ok
     int* const p3 = &a;//error
     const int* const* p4 = &a;//ok
     int* p5 = (int*)&a;//ok 不安全
     return 0;
 }
 ​

同类型指针的兼容程度和规模 能力强的指针赋值给能力收缩的指针

 int main() {
     int a = 10, b = 20;
     int* p = &a;
     int* s1 = p;//ok
     const int* s2 = p;//ok
     int* const s3 = p;//ok
     const int *const s4 = p;//ok
 }

const引用

 int main() {
     int a = 10;
     const int b = 20;
     int& x = b;//error
     const int& x = b;//ok
     const int& y = a;//ok
     const int& z = 10;//ok
     return 0;
 }
 //为了安全
 const int& X = b;
 //int tmp = b;
 //cosnt int &x = b;
 const int& Z = 10;
 //int tmp = b;
 //const int &z = tmp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值