狄泰C++课程学习笔记:第三课:进化后的const分析
2018-02-04 22:24
330 查看
一、C和C++中的const对比分析
C:const修饰的量本质是只读变量,并不是真正意义上的常量,C中只有enum定义出来的枚举才是真正意义上的常量。1、const修饰的全局变量编译进入只读数据区,尝试修改全局数据区的数据将会引起程序的崩溃(在gcc编译环境下崩溃表现为段错误Segmentation fault (core dumped))
2、const修饰的局部变量则仍然存储在栈(stack)上,通过指针的方式仍可对其进行修改,这里的const修饰只是告诉编译器该变量符号不能出现在赋值符号的左边
C++:const修饰的量成为真正意义上的常量,会被编译进入符号表,只有在程序中对该变量进行了extern外部声明或者&取地址操作,编译器才会为其分配存储空间(这种做法只是为了兼容C语言的行为),但实际上程序中使用该常量时会直接从符号表中查询取值,而不会去使用内存中的值。
二、const和#define不同点比较
第一:#define宏在预处理时期会被预处理器进行直接的文本替换,而不进行任何的语法和语义等检查,会存在一定的风险和漏洞
const修饰的量会在编译期被编译器进行处理,会进行严格的语法、语义、类型等的检查
第二:
#define宏不存在生命周期、作用域等概念
const修饰的量则有着作用域的限制,作用域外的程序则不能对其进行访问
相关文章推荐
- 狄泰C++课程学习笔记:第五课:引用的本质分析
- 4000 C++中进化后的const(学习笔记)
- TRIZ理论的进化法则分析(TRIZ学习笔记)
- 狄泰C++课程学习笔记:第四课:bool类型和引用
- 机器学习之&&Andrew Ng课程复习--- 学习笔记(第三课)
- [原创] linux课堂-学习笔记-课程3.Linux目录结构介绍及内核与shell分析
- 机器学习(八):CS229ML课程笔记(4)——生成学习,高斯判别分析,朴素贝叶斯
- 二. MFC框架程序分析--Windows编程课程学习笔记
- 吴恩达深度学习课程第三部分笔记要点
- 课程笔记-深度学习之逻辑回归(Regression)pokemon案例分析
- TRIZ理论的进化法则分析(TRIZ学习笔记)
- c语言学习笔记(3)const和volatile以及const volatile int i=0分析
- linux学习笔记之linux文件结构分析
- 我从吴恩达深度学习课程中学到的21个心得:加拿大银行首席分析师“学霸“笔记分享
- PE文件学习系列笔记四-C++实现PE文件的分析
- 林轩田之机器学习课程笔记( embedding numerous feature之kernel support vector machine)(32之19)
- snmp学习笔记之二trap——分析notification.c文件
- android逆向学习,笔记(三)静态分析android程序
- Android项目下目录分析(Android第一行代码学习笔记3)
- 吴恩达深度学习课程笔记