c++中const限定修饰符

const限定修饰符:

下面的循环有两个问题,都是由于使用512作为循环上限引起的:
 for( int index =0; index < 512; ++index)
    第一个问题是可读性。用512来测试index是什么意思呢?循环再做什么呢?----即512是什么意思?[在本例中,512被称作魔数(magic

number),他的重要性在上下文中没有体现出来,就好像这个数是凭空出现的。]
    第二个问题是可维护性。想象程序有10000行,512在4%的代码中出现。在这400个出现中,80%必须要被改成1024。为了做到这一点,我们

必须明白哪些512时要被转换的,而哪些不是.即使之有一个地方弄错了,也会中断程序,要我们回头全部重新检查一遍。
    这两个问题的解决方案就是使用一个被初始化为512的对象。通过选择一个助记名,可能是bufSize,使程序更具可读性。现在,条件测试

变成与对象作比较,而不是与一个文字常量作比较:
 index < bufSize
    我们不需要再把320个出现512的地方一一找出来,只需改变bufSize的值就行了。我们只需改变bufSize被初始化的那一行。这种方法不仅只

需要很少的工作量,而且大大减少了出错的可能性。这种方案的代价是一个额外的变量。现在512被称为是局部化的(localized)。
为了减少错误改变bufSize的值,把它定义为右值形式,即常量。

const标识符,
1、因为常量定义后就不能被修改,所以他必须被初始化。
2、如果允许非const对象的指针指向一个常量对象,把“试图通过该指针间接的改变对象值”的动作标记为非法的,对编译起来说是不可行的。因而任何“试图将一个非const对象的指针指向一个常量对象”的动作都将引起编译错误。必须声明一个指向常量的指针。指向常量的指针本身不是常量,可以重新赋值,指向不同的常量对象,但是不能修改它所指向的对象.(经过调试,指向常量的指针也可以不指向常量,但是无法同过指向常量的指针来修改这个变量的内容,报错:error C2166: l-value specifies const object.但可以直接修改变量的).常量对象地址只能赋给指向常量的指针,否则error C2440: '=' : cannot convert from 'const int *' to 'int *'
        Conversion loses qualifiers
3.const指针,常量指针,可以是指向非常量的常量指针,也可以是指向常量的常量指针.
 const double pi=3.14;
 double p;
 double *const p_ptr=&p;//指向非常量的常量指针,指针本身不能被修改,但指向的内容可以修改.
 const double *const pi_ptr=&pi;//指向常量的常量指针;

// pointer.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream.h>
#include <cstring>

int main(int argc, char* argv[])
{

 int a=5;
 int *pa=&a;
 int **ppa=&pa;
 int ***pppa=&ppa;

 const int c=6;
 const int *pc;
 
// pa=&a;    //error C2440: '=' : cannot convert from 'const int *' to 'int *' Conversion loses qualifiers

 pc=&c;
 pc=&a;
 a=6;
// *pc=6;

 cout<<"a="<<a<<'/n';
 cout<<"pa="<<pa<<'/n'<<"*pa="<<*pa<<'/n';
 cout<<"ppa="<<ppa<<'/n'<<"*ppa="<<*ppa<<'/n'<<"**ppa="<<**ppa<<'/n';
 cout<<"pppa="<<pppa<<'/n'<<"*ppa="<<*pppa<<'/n'<<"**pppa="<<**pppa<<'/n'<<"***pppa="<<***pppa<<'/n';
 return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值