C++中const

1、const说明符

   限定符声明变量只能被读,必须初始化。

const double *point;//指向常量的指针,定义时初始化与否均可,如果是const *double point 则为常指针,则必须在定义的时候初始化。

int i=42;

const int ci=i;

int j=ci;//ci的常量特征仅仅在执行改变ci的操作时才会发挥作用,当用ci去初始化j时,根本无需在意ci是不是一个常量,拷贝一个对象的值并不会改变它,一旦拷贝完成,新的对象就和原来的对象没有什么关系了。

2、编译的时候编译器将所有ci用42代替。

3、const对象只在文件内有效,不同文件定义的同名const是不同的变量。为了让不同文件共享一个const常量,必须用extern进行限定

//file_1.c

extern const int bufSize=fcn();

//file_1.h

extern const int bufSize;//与file_1.c中定义的bufSize是同一个

4、对const的引用(常量引用)、指针和const

   (1)const int ci=1024;

const int &r=ci;//ci是常量对象,r是其引用

int &r2=ci;//错误试图让一个非常量引用指向一个常量对象

而int i=42;

const &ri=i;//是可以的,常量引用可以指向非常量。

(2)指向常量的指针(pointer to const),不能用于改变其所指对象的值。想要存放常量对象的地址,只能使用指向常量的指针。而指向常量的指针可以指向非常量对象。

(3)指针是对象而引用不是,因此就像其他对象类型一样,允许把指针本身定义为常量。

常量指针(const pointer):定义时必须初始化,

int e=0;

int  *const curerr=&e;

顶层表示指针本身是个常量,底层表示指针所指的对象是个常量。

5、类的成员函数

struct  Sales_data {

std::string isbn() const{ return bookNo} //const修改隐式指针的类型

}

Sales_data total;

当调用:total.isbn()

则编译器负责把total的地址传给isbn的隐式形参this,可以认为编译器将调用重写为了:

isbn(&total)

其中,调用Sales_data的isbn成员时传入了total的地址。

isbn还可以i写成:

std::string isbn() const{ return this->bookNo} //this默认是一个常量指针,不允许改变this中保存的地址。而用const修饰表示this是指向常量的指针。

被const修饰的成员函数被称作常量成员函数,其不能改变调用它的对象的内容,isbn函数可以读取调用它的对象的数据成员,但是不能写入新的值。

猜你喜欢

转载自blog.csdn.net/weixin_41484240/article/details/81348425