一,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的更多相关文章

  1. C++中的const关键字

    http://blog.csdn.net/eric_jo/article/details/4138548 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方 ...

  2. C++中关于const的思考

    在学习C++的过程中,经常被什么时候使用const.为什么使用const以及怎么使用const关键字这样的问题所困扰,以下是我对const的使用总结. 1.值替代 使用#define的确单缺点,第一: ...

  3. C与C++中的const

    同样,有下面一段代码: #include <iostream> using namespace std; int main() { ; int *j = (int *) &i; * ...

  4. C++中加const与不加const的区别

    “常量”与“只读变量”的区别. 常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它. “只读变量”则是在内存中 ...

  5. C++笔记019:C++中的const修饰的是一个真正的常量

    原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 程序一: 我们知道数组的下标不能为变量,必须是一个确定的值.在C语言中看程序: #define a 10 int main() { //第 ...

  6. C++中的const总结

    CONST 一.符号常量 声明: const 类型说明符 常量名 = 常量值: const float PI = 3.1415927; //可以交换const与float的位置 符号常量在声明时一定要 ...

  7. C和C++ 中的const

    C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中.所以,以下代码: #include <iost ...

  8. c++中的const和volatile知识自我总结

    学习了下c++中的const关键字,总结如下. 1.const限制一个变量不能修改其内容,如果强行修改的话,如下面代码这样子,编译就会报错,“表达式必须是可修改的左值”. int main() { c ...

  9. C++中的const的用法

    const对象.指向const对象的指针.const指针(通过一个面试题来了解)   1.const对象 (1)关于const,很多企业的笔试.面试都会出现,很简单,就问你“const的含义?”. 我 ...

随机推荐

  1. 使用python抓取婚恋网用户数据并用决策树生成自己择偶观

    最近在看<机器学习实战>的时候萌生了一个想法,自己去网上爬一些数据按照书上的方法处理一下,不仅可以加深自己对书本的理解,顺便还可以在github拉拉人气.刚好在看决策树这一章,书里面的理论 ...

  2. 前端学HTTP之web攻击技术

    前面的话 简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象.应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标.本文将详细介绍攻击web站点 ...

  3. ASP.NET MVC原理

    仅此一文让你明白ASP.NET MVC原理   ASP.NET MVC由以下两个核心组成部分构成: 一个名为UrlRoutingModule的自定义HttpModule,用来解析Controller与 ...

  4. ExtJS 项目准备工作(一)

    首先,需要从网上下载两个文件,一个是SenchaCmd-6.2.0-windows-64bit(我的电脑是window 10 64位) 另一个是ExtJs6的源码包(ext-6.0.0.415). 源 ...

  5. vim环境变量配置、背景色配置

    我们使用vi或者vim的时候,如果想要显示行号,可能会这样做:切换到命令模式,然后输入set nu,再按回车键就显示了:还有就是咱们在编写程序的时候,有的时候会希望按下回车键后,光标不是每次都在行首, ...

  6. Windows下Nginx配置SSL实现Https访问(包含证书生成)

    Vincent.李   Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...

  7. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  8. ubuntu15 coreclr

    看了很多文章心里痒痒,也下载个ubuntu想发布个asp.net5试试,自然是下载的最新版本15.结果涉及dnu restore,dnx...什么的都没反应,切换为mono就正常,奇怪了,按说core ...

  9. ES6 箭头函数中的 this?你可能想多了(翻译)

    箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...

  10. SQL Server 索引和表体系结构(非聚集索引)

    非聚集索引 概述 对于非聚集索引,涉及的信息要比聚集索引更多一些,由于整个篇幅比较大涉及接下来的要写的“包含列的索引”,“索引碎片”等一些知识点,可能要结合起来阅读理解起来要更容易一些.非聚集索引和聚 ...