const 详解

代码示例是最好的讲解方式:

str[] = "I love China"; //这里str是头指针,可以通过str改动字符串:str[2] = 'U';



case 1:通过const限定p指向的内容(value);这里str本身是可以修改的,但不能通过p去修改字符串的值。

const在*的前面,限定的就是*x的东西,*x就是值。

const char * p = str;  //char const * p = str 等价, 限制的是*p(p的内容),即,p指向的内容不能通过p被修改,但可以通过str自己修改。



case2:通过const限定p,而不是p的指向的值。

const在*的后面,限定的就是x,x就是那个地址(指针),而不是它指向的value。

char * const p = str; // 限制的是p,所以,p不能执行p++这样的操作。


同理,看以下的引用也是修改的value:
int ii = 8;
const &pii = ii;
ii = 9;    //OK,ii自己并没有被const限定,const限定pii,不会影响到ii的属性。
pii = 10; //这里会报错,因为pii被const限定,它指向的value不能通过pii修改。

这个const限定的也是值。

const int &b = 32; //这里的引用其实分配了内存保存32。


const修改入参:
这样就使得实参类型更加灵活(可以传入const int &def;也可以直接传入立即数)
也更加安全,不容易被无意改动原本不应该被改动的参数。
void func(const int &readonly)
{
    readonly = 5; // error:不能被修改,编译失败。
}

const int &def = 9;
func(def);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值