【C++】const
1、 默认状态下,const对象仅在文件内有效,即在不同文件中出现同名const变量的时候,其实相当于这些同名const是不同的东西。
如果想要在文件中共享const变量,可以在const变量不管是声明还是定义都添加extern关键词,这样就只需要定义一次。
2、 const的引用,不能通过引用改变被引用对象(被引用的对象不一定是常量,可以被通过其他方式修改)
引用的类型必须与被引用对象类型一致,但在对const的引用中有两种例外:
- 初始化常量引用时可以用非常量、字面值甚至表达式等任意表达式作初始值
int var = ;
const int &r1 = var * ;
- 为常量引用绑定一个临时量,即常量引用被绑定到不同类型的对象上时会被绑定到一个由不同类型到常量引用类型转换后的临时量上。(前提是这两种类型可以隐式转换)
对比一下,很容易理解,上述两种情况如果不是const引用,都是非法的
3、 指针和const
- 指向常量的指针【pointer to const】,不能用于改变所指向对象的值,但是指向的对象并不一定是常量,可以通过其他途径改变,(存放常量对象地址,只能用这个)
Double dvar = 3.14;
Const double *cptr = &dvar; //常量指针指向非常量可以,但是不能改变其值
- 常量指针【const pointer】,因为指针是对象,定义常量指针必须初始化,而且初始化完成就再也不能改变,*放在const之前,表明是常量指针。此时,不变的是指针的值,而非指针指向的那个值,可以通过指针修改对象的值,但是这个指针这辈子只能指向这一个对象啦
int num = ;
int *const ptr = #
- 指向常量的常量指针,就是指针一辈子只能指向一个永不改变的对象。
Const int num = ;
Const int *const ptr = #
总结:指向常量的指针,类似于常量引用,指针可以改变自己指向谁,但是不能改变自己指向对象的值;常量指针一辈子只能指向一个对象,可以改变对象的值;指向常量的常量指针,就是二者的结合啦
4、 顶层const与底层const
顶层const表示指针本身是一个常量,其值不允许改变
底层const表示指针指向的内容是一个常量,指针本身可以被改变
【C++】const的更多相关文章
- 【03】const
[03]const 魔芋总结: 1,声明的是常量,一经声明,不得修改.必须声明的同时并赋值.否则报错. 2,只在声明所在的块级作用域内有效. 3,const命令声明的常量也是不提升,同样存在暂时性死区 ...
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- 【转】const和static readonly
我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等.在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在声 ...
- 【转】const 是左结合的,若左边为空,则再向右结合
const 是左结合的,若左边为空,则再向右结合 一.指向 const 对象的指针指向 const 对象的指针,指的是指针指向的对象的内容是const的,不可修改,但指针本身(即指针的值)是可 ...
- 【转】const的用法,特别是用在函数前面与后面的区别!
在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址. 在 const成员函数中,this的类型是一个指向 ...
- 【C】——const和volatile可以并用吗?
答案是肯定的,可以一起用. 因为很多人误解了const的真正含义,很多初学者认为const修饰的就是常量,而常量不会改变,而既然不会改变,那volatile就没有意义. 但是实际上这正是对const的 ...
- 【C++】const成员函数
形式: 在成员函数后面加上const限定词,表示不会修改对象内容. 例如Circle类: class Circle { double r; public: Circle(double newr) { ...
- 【C++】const、volatile不能修饰没有this指针的成员函数
一般所有的成员函数都只有一个复本,当不同的对象调用成员函数时,为了区分是哪个成员在调用,会传入this指针. 当调用有const.volatile修饰的成员函数时,会相应的传入一个const.vola ...
- 【C++】const 常引用的用法
用法: const int & a; 定义了一个整型常引用变量a. 特点: 1.不能够通过常引用变量来修改其值,如: const int & a = 10; a = 12;//编译报错 ...
随机推荐
- Qt搭建多线程Server
起因是MySQL在Android上没有驱动.也就是说,移动端想要访问远程数据库,必须通过一台(或多台)PC进行中转. 中转PC作为Server,接受来自移动端Socket访问数据库的要求,Server ...
- [深入浅出Windows 10]分屏控件(SplitView)
4.18 分屏控件(SplitView) 分屏控件(SplitView)是Windows 10新增的控件类型,也是Windows 10通用应用程序主推的交互控件,通常和一个汉堡按钮搭配作为一种抽屉式菜 ...
- URAL 1501. Sense of Beauty(记忆化搜索)
题目链接 本来暴力写个TLE了,加上记忆化就A了. #include <cstring> #include <cstdio> #include <string> # ...
- 递归函数的用法及array_merge的用法
$info=M('navclass')->select(); function getAllArray($data, $pid =1) { $arr = array(); foreach ($d ...
- POJ3903:Stock Exchange(LIS)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#problem/E 题目: Description The world ...
- python 之ConfigParser
ConfigParser 简介ConfigParser是用来操作配置文件的模块. 说明:[**]为配置文件的section,基本格式为 [section] key = valueeg: [db] db ...
- Hadoop.2.x_集群初建
一.部分概念 1. 分布式:一个项目分为多个模块共同完成一个或多个任务,可部署在一个或多个机器 2. 集群:多个机器运行同一个项目或服务 3. 集群上可能运行着零个或多个分布式系统(比如Hadoop, ...
- apache中.htaccess不起作用
找到apache的配置文件httpd.conf文件,找到: 代码如下 复制代码 #LoadModule rewrite_module modules/mod_rewrite.so 去掉前面的#号. ...
- html5响应式设置<meta>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> < ...
- 在html中如何获取表单提交的数据
a.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www ...