C++基础:const修饰符

时间:2022-12-20 21:06:52

在C语言中我们经常使用#define来定义常量

#define pi 3.14;

C++提供了一种更灵活、更安全的方式来定义常量,即使用const修饰符来定义常量。

const  float pi = 3.14;

这个常量pi是类型化的,它有地址,可以用指针指向它,但不能修改它。const与#define相似,但它消除了#define的不安全性,因此C++建议用const取代#define定义常量。

const可以与指针一起用,有三种情况,如下:

1、指向常量的指针:一个指向常量的指针变量。

const char * pc = "abcd";

这个语句的含义是:声明一个名为pc的指针变量,它指向一个字符型常量,初始化pc为指向字符串“abcd”.

不允许改变指针所指的变量,但可以改变所指的地址。

如:pc[3]='x';   是错误的;

pc="efgh"; 是正确的,可以改变地址。

2、常指针:把指针变量所指的地址,而不是它所指的对象声明为常量。

char * const pc = "abcd";

这个语句的含义是声明一个名为pc的指针变量,该指针是指向字符型数据的常指针,用字符串abcd来初始化该常指针。

创建一个常指针,就是创建一个不能移动的固定指针即不能改变指针所指的地址,但是它所指的地址中的数据可以改变。如:

pc[3]= 'x';是正确的

pc="efgh";是错误的,地址为常量,不能进行改变。

3、指向常量的常指针:这个指针变量所指的地址不能改变,它所指向的地址中的数据也不能改变,要声明一个指向常量的常指针,二者都要声明为const.

const char * const pc = ""abcd;

例如:pc[3]=''x;   错误

pc= "efgh";     错误;

函数的参数也可以用const说明,用于保证实参在该函数内部不被改动,大多数c++编辑器能对具有const参数的函数进行更好的代码优化。

int i_max(const int * ptr);

这样做的目的是确保原数组的数据不被破坏,即在函数中对数组元素的操作只许读不许写。

某些时候const变量的初始值不是一个常量表达式,但又确实有必要在文件间共享。在这种情况下,我们想只在一个文件中定义const,而在其他多个文件中声明并使用它。解决的办法是,对于const变量不管是声明还是定义都添加extern关键字,这样只需定义就可以了。

如:

// file_1.cc 定义并初始化了一个常量,该常量能被其他其他文件访问

extern const int bufsize = fcn();

//file_1.h头文件

extern const int bufsize;//与file_1.cc的bufsize是同一个。

在函数中使用常量函数和常量引用是避免直接对实参的拷贝。