一:定义常整型数 const int a;(或者int const a;)  不涉及指针

不可改变值(也不可通过指针修改)

二:定义一个指向常整型数的指针 const int* c;   可改指针指向,不可以该内存数据

const用于修饰int* c---是一个具体内存,所以该内存数据是不允许修改的,但是c自身是一个指针,是可以被修改的

不允许修改内存数据

可以修改指针指向

三:定义一个常指针 int * const d; 可改内存数据,不可改指针指向

const是修饰d指针变量,则该指针变量指向不允许修改,但是可以修改内存中值
c是一个指针变量,代表一个地址,这个地址不允许修改(通过直接修改或者二级指针都不行),但是可以修改其中内存中值

不允许修改修饰的指针

由于const并没有修饰内存,所以可以修改内存数据

四:定义一个指向常整型的常指针const int* const e;  内存和指针都无法修改

五:总结--用于在为外提供接口时,防止其他人修改数据。

主要看const修饰的是指针,还是整个内存数据来进行识别
const int* c              -----   const修饰整个内存数据,故不可修改内存数据,可以修改指针地址
int * const d ----- const修饰指针变量d,故不可修改指针变量的值(即指针地址),但是可以修改内存
const int* const e ----- const修饰整个内存数据和指针地址,都不允许修改

六:补充--符号表《重点》

问题抛出(一):

问题抛出(二)

存疑:这里可以认为符号表是针对局部const常量存在

解决(一):什么是符号表?《重点》

碰见const局部常量声明,将这个常量名:常量值放入符号表(不同于直接使用的内存)

解决(二):为什么a值不变,而*p值改变了《重点》

.a指向符号表,依旧存在,故不变(编译过程中若发现使用常量则直接以符号表中的值进行替换)
.编译过程若发现对const使用extern或者&操作符,则给对应的常量分配存储空间

七:常对象和常函数(非重点)

(一)常对象

const 类名 对象名  或者  类名 const 对象名
声明为常对象的同时必须被初始化,并且之后不能改写对象的数据成员

(二)常函数:对函数功能有更明确的限定,例如只能输出,但不能进行修改

常函数不能修改对象的数据成员
常函数只能调用常成员变量和其他常函数
常函数可以进行重载
void p()  //普通对象会调用
{} void p() const  //常对象会调用
{}
class Test
{
int n;
static int n2;
const int n3;
public:
Test(int a) :n3(a) //对于常量必须一开始就赋值
{
n = a;
} void setNum(int a)
{
n = a;
} static void setNum02(int a)
{
n2 = a;
} void setNum03(int a) const
{
}
}; void main()
{
const Test t();
Test::setNum02();
system("pause");
}

C++回顾day01---<const常量重点>的更多相关文章

  1. C++类静态成员变量和const常量的初始化方法

    C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...

  2. const常量类型

    1.定义:const常量类型表示一个”常值变量“,其值是不能被修改的变量.即一旦变量被声明为const类型,编译器将禁止任何试图修改该变量的操作. 2.声明:const <声明数据类型> ...

  3. #define宏常量和const常量的区别

    C++ 语言可以用const 来定义常量,也可以用#define 来定义常量.但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查.而 ...

  4. 在 C++ 程序中只使用 const 常量而不使用宏常量

    在 C++ 程序中只使用 const 常量而不使用宏常量,即 const 常量完 全取代宏常量. #include <iostream> /* run this program using ...

  5. define 和 const常量有什么区别?

    define在预处理阶段进行替换,const常量在编译阶段使用 宏不做类型检查,仅仅进行替换,const常量有数据类型,会执行类型检查 define不能调试,const常量可以调试 define定义的 ...

  6. 如何正确使用const(常量),define(宏)

    前言 在开发中,也许我们会经常使用到宏定义,或者用const修饰一些数据类型,经常有开发者不知道怎么正确使用,导致项目中乱用宏定义与const修饰符.本篇主要介绍在开发中怎么正确使用const与def ...

  7. C++ const常量对象、常量成员函数和常引用

    01 常量对象 如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字 class CTest { public: void SetValue() {} private: int ...

  8. 【C++编程基础】(1)—— 函数原型声明、函数模板、引用、const 常引用、const 常量指针

    一.函数原型声明: 1.函数声明告诉编译器函数的名称,和如何调用函数(返回类型和参数):函数定义提供了函数的实际主体. 2.强制性的:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前 ...

  9. const常量与define宏定义的区别(转)

    #define RADIUS 100; const  float   RADIUS = 100; (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. ( ...

随机推荐

  1. 查询SQL磁盘活动量信息

    /* 用来显示有关由 Transact-SQL 语句生成的磁盘活动量的信息.*/DBCC DROPCLEANBUFFERS --清空缓存set statistics io on --开启set sta ...

  2. altera rom ram IP的浅层理解

    1.altera 提供了两种rom :单口rom和双口rom. 官方文档偷图: 单口rom:输出可以配置寄存器寄存再输出,时钟可以输入输出用不同的时钟. 双口rom:输入输出时钟可不同或者A与B的时钟 ...

  3. Eslint相关知识和配置大全

    ESLint最初是由Nicholas C. Zakas 于2013年6月创建的开源项目.它的目标是提供一个插件化的javascript代码检测工具. 代码检查是一种静态的分析,常用于寻找有问题的模式或 ...

  4. 【hdu6188】Duizi and Shunzi(贪心)

    2017ACM/ICPC广西邀请赛 重现赛1007 Duizi and Shunzi 题意 有n张牌,问你最多能组成多少对子+顺子?一个牌只能用在一个顺子或者对子中. 题解 本来想写dp的,不会..小 ...

  5. day15-集合

    快捷键: 先定义name,age再利用快捷键生成,Alt+shift+s +c:空参 Alt+shift+s +o:有参 Alt+shift+s +r:set&get方法Ctrl+shift+ ...

  6. NOI2010能量采集(数学)

    栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有n列,每 ...

  7. 20165223 《JAVA程序设计》第四周学习总结

    20165223 <JAVA程序设计>第四周学习总结 教材学习内容总结 第五章要点 子类与继承 成员变量的隐藏和方法重写 super关键字 继承与多态 abstract类与abstract ...

  8. Python3 与 C# 并发编程之~ 线程篇

      2.线程篇¶ 在线预览:https://github.lesschina.com/python/base/concurrency/3.并发编程-线程篇.html 示例代码:https://gith ...

  9. Python学习day1 初识python&环境安装

    day1 环境安装-计算机基础 环境安装参见 https://blog.csdn.net/ling_mochen/article/details/79314118 1.markdown基本语法 htt ...

  10. MongoDB查询内嵌数组(限定返回符合条件的数组中的数据)(1)

    https://blog.csdn.net/bicheng4769/article/details/79579830 项目背景 最近在项目中使用mongdb来保存压测结果中的监控数据,那么在获取监控数 ...