【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;//编译报错 ...
随机推荐
- WPF [调用线程无法访问此对象,因为另一个线程拥有该对象。] 解决方案以及如何实现字体颜色的渐变
本文说明WPF [调用线程无法访问此对象,因为另一个线程拥有该对象.] 解决方案以及如何实现字体颜色的渐变 先来看看C#中Timer的简单说明,你想必猜到实现需要用到Timer的相关知识了吧. C# ...
- Leetcode Combination Sum II
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- Coder-Strike 2014 - Round 1 D. Giving Awards
题目的意思是 老板给n个人发工资,x欠y的工资,the joy of person x from his brand new money reward will be much less, 老板想避免 ...
- libc abi.dylib: terminate_handler unexpectedly threw an exception
错误代码:很明显的错误,一定要谨记. - (NSInteger)giftCountFullScreen{ NSArray *arr = [NSMutableArray arrayWithArray:s ...
- spring mvc 拦截器 拦截子目录
项目中碰到这一个问题: 对于/user/loginpage,/user/login这一类的url,放行: 对于/user/{userId}/xxx(xxx不为空)的操作,需要拦截,url-patter ...
- ubuntu安装配置jdk tomcat mysql ...
安装之前大家一定要检查好各个版本问题 以免造成不兼容. (一)下载所需安装包: jdk-7u76-linux-x64.tar.gz apache-tomcat-7.0.63.tar.gz MySQL- ...
- Spring的quartz定时器同一时刻重复执行二次的问题解决
最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的hashcode,发现是不一样的,也就是说,在web容器启动的时候, ...
- jquery ui bootstrap日期插件
http://blog.csdn.net/php_897721669/article/details/7404527 搜索“jquery ui日期插件怎么显示年份”? $("#datepic ...
- javascript控制开始日期,和结束日期在同一个月
/* * 控制开始日期,和结束日期 * 开始日期为当前月份,结束日期为当天 * 开始日期为之前月份,结束日期为最后一天 * @return string * @poseidon 2015-9-17 * ...
- NYOJ背包问题
#include <stdio.h> struct group{ int value; int weight; }; void Sort(group bag[],int num) { in ...