【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;//编译报错 ...
随机推荐
- EF框架step by step(4)—DBcontext应用于已存在数据库
EF4.1有三种方式来进行数据操作及持久化.分别是Database-First,Model-First,Code-first,前面都已经简单介绍过了.下面简单小结一下:1.Database First ...
- HDU2191(多重背包)
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> ...
- Hadoop中客户端和服务器端的方法调用过程
1.Java动态代理实例 Java 动态代理一个简单的demo:(用以对比Hadoop中的动态代理) Hello接口: public interface Hello { void sayHello(S ...
- ACM cigarettes
cigarettes 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 Tom has many cigarettes. We hypothesized that he ...
- 读书笔记:javascript高级技巧(二)
四.惰性载入函数 因为浏览器兼容的原因,我们的javascript代码会有大量的if语句,将执行引导到正确的代码中,看如下函数: function createXHR(){ if (typeof XM ...
- Mac OS X中MacPorts安装和使用
安装 官网pkg安装 搜索索引中的软件port search name 安装新软件sudo port install name 卸载软件sudo port uninstall name 查看有 ...
- UVA 11489 - Integer Game(找规律)
题目链接 #include <cstdio> #include <cstring> #include <string> #include <cmath> ...
- Window对象简介
Window对象是JavaScript层级中的顶层对象. Window对象表示一个浏览器窗口或一个框架,它在<body>或<frameset>出现时被自动创建. Window对 ...
- 十、ios 模态窗口[实例]
一.模态窗口概念 对话框一般分为两种类型:模态类型( modal )与非模态类型( modeless ).所谓模态对话框,就是指除非采取有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话 ...
- winform让子窗体始终居于父窗体的中间
实例: FormMsg msg = new FormMsg(); msg.TopMost = True; msg.StarPosition = FormStarPosition.Centerparen ...