const变量的副本

    const int ii = 3;
    int *pi = (int *)ⅈ
    *pi = 4;
赋给指针的是const的副本
也就是没有 改变 const的值,只是改变了副本的值

(1)const变量

澳门新葡亰 1

 

非 const 变量默认为extern。要使 const 变量能够在其他的源

 

文件中访问,必须地指定它为 extern。否则会报错:error LNK2001:
无法解析的外部符号”int const
BUF_SIZE”([email protected]@3HB)

 

澳门新葡亰 2

澳门新葡亰 3

 

 

 

 

 

 

澳门新葡亰,(2)const 限定符既可以放在类型前也可以放在类型后,如下s1和s2类型相同:

 

string const s1; 

 

const string s2; 

 

(3)指针和const

 

const的鉴别:在*左边或右边画一道竖线,看是否和const在一起,和const在一起就是不可以改变的。const
void *p1 不是p1不能改变,而是p1所指向的内容不可以改变。

 

如果const出现在*号左边,修饰的是指针指向的对象,被指对象是常量,即对象不可修改。如果const出现在*号右边,修饰的是指针本身,指针本身是常量,即指针不能再指向别的内存。如果const出现在*号两边,则指针和被指对象均是常量。

 

(3.1)指向const对象的指针

 

为了保证如果指针指向const对象,则不允许用指针来改变其所指的const值这个特性,C++
语言强制要求指向const对象的指针也必须具有const特性。

 

把一个 const 对象的地址赋给一个普通的、非 const
对象的指针也会导致编译时的错误:

 

const double pi = 3.14;

 

double *ptr = π // error:ptr is a plain pointer

 

const double *cptr = π //ok: cptr is a pointer to const

 

不能使用 void* 指针保存const 对象的地址,而必须使用 const void*
类型的指针保存 const 对象的地址:

 

const int universe = 42;

 

const void *cpv = &universe;// ok: cpv is const

 

void *pv = &universe; // error:universe is const

 

允许把非const对象的地址赋给指向const对象的指针,例如:

 

double dval = 3.14; // dval is adouble; its value can be changed

 

const double *cptr = &dval;// ok: but can’t change dval through cptr

网站地图xml地图