首页 / C++ / C++ const限定符
C++ const限定符
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ const限定符,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1781字,纯文字阅读大概需要3分钟。
内容图文
![C++ const限定符](/upload/InfoBanner/zyjiaocheng/1133/98724f815c624b62ac60ae84b0a51149.jpg)
const限定符:利用const对对象加以限定,使得const对象一旦创建后其值就不能再改变。
const对象在定义时就必须对其进行初始化,有两种方式:
const int x = 10; const int x = getValue();
第一种是直接给对象赋值一个常量或常量表达式,以这种方式初始化的,编译器会在编译阶段对所有的对象进行替换,如:把程序中所有出现x的地方都替换为10。
第二种方式是在运行时初始化,通过函数getValue()的返回值来初始化x。
默认情况下,const对象只在文件内有效,要在所有文件中使用同一个const对象可以在定义const对象时加上extern,并在其他文件中使用extern申明该const对象,如:
extern const int x = 10; //在main.cc中 定义const int类型对象,并初始化。 extern const int x; //在main.h中 申明const int类型对象。
const的引用:
初始化const引用时允许使用任意表达式作为初始值,如:
int x = 10; double y = 10.4; const int &r1 = x; const int &r2 = 10; const int &r3 = x * 10; const int &r4 = y;
对于后三种情况,其实r是绑定了一个临时量,编译器会将代码变成如下:
int tmp = y; const int &r4 = tmp;
此时不能改变r4的值,改变y时,r4的值也不会随之改变,因为r4是一个临时量的引用。
const的引用可以引用一个非const的对象,const的引用只是对引用可参与的操作做出限定,而对于引用的对象本身是不是一个const对象未做限定,如:
int x = 10; const int &r = x;
指针和const:
指向常量的指针:指的不能修改指针所指向的对象的值,指针本身的值可以改变,即可以重新指向别的对象,如:
const int x = 10; int y = 20; const int *p1 = &x; const int *p2 = &y; //指向常量的指针可以指向非常量 *p2 = 10; //错误,不能改变指向常量的指针所指向的对象的值,就算对象本身为非常量也不可以
const指针:即常量指针,定义时就必须初始化,且之后不能再将该指针指向其他对象,但可以通过该指针修改所指向的对象的值,如:
int x = 10; int * const p = &x; //不能修改指针本身的值,只能修改指向所指对象的值 const int * const p2 = &x; //指向常量对象的常量指针,即不能修改所指对象的值,也不能修改指针本身的值
constexpr和常量表达式:
常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式。字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定,只有const类型,且初始化值为常量表达式时,该对象才为常量表达式。
在一个复杂的系统中,很难分辨一个初始值到底是不是常量表达式,C++11中规定,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化,如:
constexpr int mf = 20; // 20的常量表达式 constexpr int limit = mf + 1; // mf + 1是常量表达式 constexpr int sz = size(); // 只有当size()是一个constexpr函数时才是一条正确的声明语句
一般来说,如果你认定变量是一个常量表达式,那就把它声明成constexpr类型。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/chenchukun/article/details/46898783
内容总结
以上是互联网集市为您收集整理的C++ const限定符全部内容,希望文章能够帮你解决C++ const限定符所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。