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,指向整数常量的常量指针
标签:pi,const,常量,int,constexpr,限定符,指针
From: https://www.cnblogs.com/overlink/p/18048739