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的含义?”. 我 ...
随机推荐
- C# ini文件操作【源码下载】
介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...
- Fis3的前端工程化之路[三大特性篇之声明依赖]
Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...
- [APUE]进程控制(上)
一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...
- SQL Server镜像自动生成脚本
SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...
- 0-1背包问题蛮力法求解(java版本)
sloves: package BackPack; public class Solves { public int[] DecimaltoBinary(int n,int m) { int ...
- 利用XAG在RAC环境下实现GoldenGate自动Failover
概述 在RAC环境下配置OGG,要想实现RAC节点故障时,OGG能自动的failover到正常节点,要保证两点: 1. OGG的checkpoint,trail,BR文件放置在共享的集群文件系统上,R ...
- mysql 学习总结
MYSQL的增.删.查.改 注册.授权 #创建一个对数据库中的表有一些操作权限的用户,其中OPERATION可以用all privileges替换,DBNAME.TABLENAME可以用*替换,表 ...
- Git使用详细教程(二)
分支 其实在项目clone下来后就有一个分支,叫做master分支.新建分支的步骤:右键项目→Git→Repository...→Branches... master分支应该是最稳定的,开发的时候,建 ...
- MySQL全文索引 FULLTEXT索引和like的区别
1.概要 InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引.对于FULLTEXT索引的内容可以使用MATCH()-AGAIN ...
- FineReport:关于扩展行列求各种条件下的函数运用
最简单的扩展列,扩展行的求"最大,最小,平均"值的例子 设计图 效果图 相关函数 =MAX(B2:E2) =MIN(B2:E2) =AVERAGE(B2:E2) 这个是(满足条件) ...