###const常量#程序员
咱们经过const修饰变量来定义常量,const对象一旦建立完成就不容许修改,const对象必须初始化。指针
const int a = 100; //正确 a = 10; //错误,const对象不容许修改 const int b; //错误,const对象必须初始化
默认状况下,const对象只在文件内有效,若是须要在其余文件中使用该对象,则需在定义和声明处均添加extern关键字,这点和变量不一样。code
//file1.h文件定义了常量a; extern const int a=100; //file1.cpp文件声明了常量a,与file1.h中的是同一个; #include "file1.h" extern const int a;
###const的引用#对象
把引用绑定到const对象上,称为对常量的引用。变量
const int a = 100; const int &b = a;
容许把对const的引用绑定到很是量上,但不容许经过对const的引用来修改很是量的值。file
int a = 100; const int &b = a; //正确,容许把对const的引用绑定到很是量上 b = 10; //错误,不容许经过对const的引用修改很是量的值
不容许把普通引用绑定到const对象上,由于试图经过引用修改const对象。引用
const int a = 100; int &b = a; //错误,不容许把普通引用绑定到const对象上
严格上来说,不存在常量引用,由于引用自己不是一个对象,可是程序员经常将对const的引用称为常量引用。程序
###指向常量的指针和常量指针#文件
指向常量的指针:co
同引用同样,指向常量的指针不容许修改所指对象的值,想要存放常量对象地址,只能使用指向常量的指针。
const int a = 100; int *b = &a; //错误,b是一个普通指针 const int *c = &a; //正确,c是一个指向常量的指针 *c = 10; //错误,不能经过c来修改常量a
同绑定const的引用同样,指向常量的指针能够指向很是量对象,指向常量仅表明不容许经过该指针修改对象的值,但没有规定所指对象必须为常量。
指向常量的指针还能够更改所指对象,但不容许修改所指对象的值。
const int a = 100; int b = 10; const int *c = &a; c = &b; //正确,容许修改所指对象,容许指向很是量对象
常量指针:
指针是对象,因此容许把指针自己定义为常量,常量指针不容许修改指针的值,可是容许经过指针修改所指对象的值。
int a = 100; int *const b = &a; *b = 10; //正确,容许经过常量指修改所指对象的值 int c = 10; b = &c; //错误,不容许修改指针自己的值
顶层const:
咱们用顶层const来表示对象自己是常量,底层const则与指针引用等复合类型的基本类型部分有关。
同其余类型相比,指针类型既能够是顶层const,也能够是底层const。
int a = 100; int *const b = &a; //不能修改b的值,b是一个顶层const const int d = 10; const int *c = &d; c = &a; //能够修改c的值,c是一个底层const