码迷,mamicode.com
首页 > 其他好文 > 详细

const 限定符

时间:2019-09-28 20:17:39      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:赋值   指针   文件访问   过程   编译器   解决办法   pre   拷贝   语句   

const 限定符

const 对象一旦创建后不可改变,所以const必须初始化.

const int i=get_size(); //运行时初始化
const int j=43;
const int k; //错误,必须初始化

默认状态下,const对象仅在文件中有效,解决办法是

对于const变量不管是声明还说定义都添加extern关键字

extern const int bufSize=fcn(); //该常量能被其他文件访问
extern const int bufSize;//为同一个

下面那些句子是合法的,如果有不合法的句子,请说明为什么.

const int buf; //必须初始化   
int cnt=0; //正确
const int sz=cnt; //正确,拷贝赋值
++cnt; //正确 
++sz; //常量对象不可改变

const 引用

引用绑定在const对象上,称为const引用

const int ci=1024;
const int &r1=c1; //引用及对应的对象都是常量

const 指针

const double pi=3.14;
const double *cptr=&p1;

顶层const

顶层const:指针本身是个常量

int i=0;
int *const p1=&i; //不能改变p1的值,是顶层const

底层const:指针指向的对象是个常量

const *int  p2=&i; //可以改变p1的值,是底层const
const int &r=p; //用于声明引用const都是底层const

constexpr 和常量表达式

常量表达式是指值不会改变并且在编译过程就能得到技术按结果的表达式

const int m=20; //常量表达式
const int j=m+1; //常量表达式

constexpr

将变量声明为constexpr类型一边由编译器来验证变量的值是否是一个常量表达式

constexpr int mf =20; // 20是常量表达式
constexpr int l=mf+1 //mf+1是常量表达式
constexpr int sz=size(); //只有当size是一个constexpr函数时才是一天正确的声明语句

指针和constexpr仅对指针有效,与指针所值的对象无关

const int *p =nullptr;
constexpr int *q =nullptr;//q是指向整数的常量指针

const 限定符

标签:赋值   指针   文件访问   过程   编译器   解决办法   pre   拷贝   语句   

原文地址:https://www.cnblogs.com/lIllIll/p/11604243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!