C++ const相关

一些结论:

  • 可以建const变量的地址赋给指向const的指针,但不能将const的指针赋给常规指针
// "hello world"为字符串常量,不可被修改,他的值为第一个字符的地址
const char * str = "hello world"; // 正确
const char * temp = str; // 正确
char *temp = str; // 错误
  • 非const指针赋给const指针是可以的
int age = 39;
int *pd = &age;
const int *pt = pd; // 允许
  • 如果数据类型本身并不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const的指针

总结一下:在赋值的时候考虑一下对数据的操作权限,不可修改的只能赋给不可修改的,可修改的能赋给不可修改的和可修改的,即进行赋值后,新变量的修改权限不能大于原来变量的修改权限

建议:
将指针参数声明为指向常量数据的指针有两条理由:
- 可以避免无意间修改数据而导致的编程错误
- 使用const是的函数能够处理const和非const实参,否则将只能接受非const数据

一些列子:

int age = 39;
const int *pt = &age;
// 第二个声明中的const只能防止修改pt指向的值,而不能防止修改pt的值。也就是说可以将新的地址赋给pt
int sage = 80;
pt = &sage; // It is ok
// 不能使用pt修改指向的值,但是可以使用sage来修改pt指向的值
sage = 49; // 此时*pt为49


// finger无法修改指向,但是可用finger修改sloth的值
int sloth = 3;
const int * ps = &sloth;
int * const finger = &sloth;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值