const限定符

Const 限定符

作用

定义一个不可改变的常量,但可初始化,给其他变量赋值

const int bufSize=512;
int i=1;
const int j=i;
int k=j;

仅在文件内生效

避免重复定义,默认const变量仅在本文件内生效.
若需在多个文件间使用,可以加上extern关键字
如,在test.cpp中定义并初始化:
extern const int tmp=get();
test.h中声明(.h文件中应都是声明),指明该变量非本文件独有,将在其他文件使用
extern const int tmp;

const引用

常量引用
const引用可以将非常量绑定到常量上,但不可被非常量引用

int i=10;
const int pi=3;
const int &j=i; //合法
int &p=j;   //非法,j是常量引用
int &k=pi;  //非法
int &q=i;
q=0;    //合法
j=0;    //非法,j是常量引用

指针和const

const指针,指针的值为常量,始终指向某个地址的值;

const double pi=3.14;
double PI=3.1415926;
const double *pi_p=π
const double *PI_p=Π
*pi_p=3.1415;    //非法,指向常量pi
*PI_p=3.14;  //合法,指向变量PI

顶层const

顶层const指指针本身是常量,底层const指 指针指向的值为常量
??

constexpr和常量表达式

常量表达式指值不变且在编译时就能得到值的表达式
const int i=func(); //非法,运行时才能得到值

constexpr int i=10;
constexpr int j=i+10;
constexpr int k=func(); //func为constexpr函数时才合法

constexpr函数(c++11)是足够简单,编译时就得出结果的函数
constexpr指针初始值必须为nullptr或0,或是储存于某个固定地址的对象

const int *p=nullptr;   //指向常量的指针,底层const
constexpr int *q=nullptr;   //指向整数的常量指针,顶层const,constexpr都是顶层const
const int t=10;
constexpr const int *k=&t;  //既是顶层const也是底层const,指向整数常量的常量指针
posted @ 2024-03-02 16:00  ddkimser  阅读(25)  评论(0)    收藏  举报