c++中const限定符解读

c++中有了const,代替了c中的define,并且表现很好!

c中的预编译 :#define MAX 500  (必须放在文件的头部)

c++中的替代:const int MAX=500; (放置的位置满足作用域规则即可)

使用const 的好处:

1):可以明确的指定类型

2);可以运用c++中的作用域规则,将其限制在特定的函数或则文件中间

3);可以运用在更复杂的数据类型中间(比如数组,指针,结构等)

那么,麻烦也就来了!const int *p;  int *const p;  const int *const p;这三个兄弟当初老师讲课的时候听的晕晕乎乎!

现在又在书上遇到了这个东西,决定详细的说明一下!

 1.const修饰的变量必须在一开始就赋初值,否则会报错!

const int i;
        i=1;
        i++;
        cout <<i<< endl;
error: uninitialized const 'i' [-fpermissive]|

 2,const修饰的变量一旦赋初值了就不能改变

const int i=1;
        i++;
        cout <<i<< endl;
error: increment of read-only variable 'i'|

3.当const修饰指针的时候,可以不用赋初值!并且,当形如const type * name的时候,该指针可以指向不同的地址

const int* i;
        int j=1;
        int k=1;
        i=&j;
        cout <<"this is j="<<j<< endl;
        i=&k;
        cout <<"this is k="<<k<< endl;
3.1当形如type *const name的时候,该指针必须一开始就赋初值,并且不应许改变!

int *const i;
        int j=1;
        int k=1;
        i=&j;
        cout <<"this is j="<<j<< endl;
        i=&k;
        cout <<"this is k="<<k<< endl;
error: uninitialized const 'i' [-fpermissive]|
int j=1;
        int k=1;
        int *const i=&j;
        cout <<"this is j="<<j<< endl;
        i=&k;
        cout <<"this is k="<<k<< endl;
error: assignment of read-only variable 'i'|
4.不能将const变量的地址赋给常规指针,但是可以将const变量的地址赋给const指针

const int j=1;
         int *i=&j;
        cout <<"this is i="<<*i<< endl;
error: invalid conversion from 'const int*' to 'int*'
const int j=1;
const int* i=&j;


注意:在函数的参数中也是遵循这种规则!

要想源地址的值不想受调用函数的影响,就应该尽可能的使用const

这样做,可以避免由于无意间修改了数据而导致编程错误;

使用const使得函数能够处理const和非const实参,否则只能接受非const数据


最后再说明一下,cosnt type *name;和type * const name的区别

int a=2;
int b=3;
const int *p=&a;

*p=5;//error
p=&b;//ok

int a=2;
int b=3;
int *const p=&a;

*p=5;//ok
p=&b;//error










  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值