C++中的const
一,C++中const的基本知识
1.C++中const的基本概念
1.const是定义常量的关键字,表示只读,不可以修改。
2.const在定义常量的时候必须要初始化,否则报错,因为常量无法修改,只能在定义的时候才可以进行初始化。
2.C++中const的基本用法
# include<iostream> int main()
{
// 表示一个整数常量
const int a = ; // 表示一个整数常量
int const b = ; // 必须在定义定义常量的时候立即进行初始化
// int const c; 该语句报错,因为未进行初始化 // 表示该指针指向的是一个常量,该指针是一个变量。不可以通过指针间接修改常量的值
const int * c;
c = &a;
// *c = 100; 该语句错误,在C++中不允许通过指针间接修改常量的值(在C中是可以的) // 表示一个常指针,该指针是一个常量,必须要立即初始化,该指针的值一旦初始化就不允许再修改
int d = ;
int f = ;
int * const e = &d;
// e = &f; 该语句错误,因为常指针不允许修改 // 表示一个指向常量的常指针,该常指针的值不允许修改,该常指针指向的内存空间的值也不允许修改
const int * const g = &d;
// g = &f; 该语句错误,常指针不允许被修改
// *g = 20; 该语句错误,因为该指针指向的是一个常量,无法间接修改该值 return ;
}
3.const的易混点的区分以及作函数参数的好处
1.const的易混点
1.常指针:该指针变量是常量,因此叫做常指针,例如:int * const tmp = &a;
2.指向常量的指针:该指针是变量,但是指向的内存空间是常量的内存空间,不允许通过间接赋值的方式改变该内存空间的值。例如:const int * tmp = &b;
3.指向常量的常指针:该指针是常量,该指针指向的内存空间也是常量,即不允许修改指针的值,也不允许间接修改指针指向内存空间的值,例如:const int * const tmp = &b;
2.const作函数参数的好处
1.清楚的区分参数是输入还是输出。
2.保护原始数据不被函数内部修改,例如:void setName(const char * name);
二,C++的const的原理
1.C语言中的冒牌货-const
1.C语言中的const是可以通过指针间接赋值的方式改变常量的值,因此C语言中的const是允许被修改,不是真正意义上的常量。因此是冒牌货。
2.C++编译器对const的处理
1.C++的编译器碰见常量声明的时候,会在符号表中把该常量放进去。
2.编译过程中若发现使用常量,则直接以符号表中的值进行替换。
3.编译过程中若发现对常量进行了&地址操作,则为该常量分配内存空间(兼容C)。
4.C++编译器虽然可能为常量分配内存空间,但不会使用其存储空间中的值。
三,const和#define的区别
1.两者的区别
1.C++中的const类似于宏定义。
2.C++中的const是由编译器进行处理的,提供类型检查和作用域检查。宏定义是由预处理器处理,单纯的文本替换而已。
C++中的const的更多相关文章
- C++中的const关键字
http://blog.csdn.net/eric_jo/article/details/4138548 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方 ...
- C++中关于const的思考
在学习C++的过程中,经常被什么时候使用const.为什么使用const以及怎么使用const关键字这样的问题所困扰,以下是我对const的使用总结. 1.值替代 使用#define的确单缺点,第一: ...
- C与C++中的const
同样,有下面一段代码: #include <iostream> using namespace std; int main() { ; int *j = (int *) &i; * ...
- C++中加const与不加const的区别
“常量”与“只读变量”的区别. 常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它. “只读变量”则是在内存中 ...
- C++笔记019:C++中的const修饰的是一个真正的常量
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 程序一: 我们知道数组的下标不能为变量,必须是一个确定的值.在C语言中看程序: #define a 10 int main() { //第 ...
- C++中的const总结
CONST 一.符号常量 声明: const 类型说明符 常量名 = 常量值: const float PI = 3.1415927; //可以交换const与float的位置 符号常量在声明时一定要 ...
- C和C++ 中的const
C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中.所以,以下代码: #include <iost ...
- c++中的const和volatile知识自我总结
学习了下c++中的const关键字,总结如下. 1.const限制一个变量不能修改其内容,如果强行修改的话,如下面代码这样子,编译就会报错,“表达式必须是可修改的左值”. int main() { c ...
- C++中的const的用法
const对象.指向const对象的指针.const指针(通过一个面试题来了解) 1.const对象 (1)关于const,很多企业的笔试.面试都会出现,很简单,就问你“const的含义?”. 我 ...
随机推荐
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- JS 判断数据类型的三种方法
说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...
- jQuery学习之路(5)- 简单的表单应用
▓▓▓▓▓▓ 大致介绍 接下来的这几个博客是对前面所学知识的一个简单的应用,来加深理解 ▓▓▓▓▓▓ 单行文本框 只介绍一个简单的样式:获取和失去焦点改变样式 基本结构: <form actio ...
- GPG终极指南(加密/签名)
我们平时都听过非对称加密,公钥和私钥,签名验证,但这些证书都是怎么得到的呢?本篇文章会解答这些问题. 背景介绍 加密的一个简单但又实用的任务就是发送加密电子邮件.多年来,为电子邮件进行加密的标准一直是 ...
- 小兔JS教程(三)-- 彻底攻略JS回调函数
这一讲来谈谈回调函数. 其实一句话就能概括这个东西: 回调函数就是把一个函数当做参数,传入另一个函数中.传进去的目的仅仅是为了在某个时刻去执行它. 如果不执行,那么你传一个函数进去干嘛呢? 就比如说对 ...
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- 理解Storm并发
作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 注:本文主要内容翻译自understanding-the-parall ...
- Windows更新清理工具 (winsxs 清理工具)
Windows 更新清理工具是一款效果非常显著的Windows7.Windows8操作系统清理优化工具!经常安装系统的朋友相比有所体会,刚刚安装完成的Win7.Win8其实占的空间并不大,去掉页面文件 ...
- 介绍一位OWin服务器新成员TinyFox
TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇".TinyFox本身的功能是html服务器,所有的WEB应 ...
- 转职成为TypeScript程序员的参考手册
写在前面 作者并没有任何可以作为背书的履历来证明自己写作这份手册的分量. 其内容大都来自于TypeScript官方资料或者搜索引擎获得,期间掺杂少量作者的私见,并会标明. 大部分内容来自于http:/ ...