一:定义常整型数 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. puppet一些常用的参数

    puppet一些常用的参数 通过@,realize来定义使用虚拟资源 虚拟资源主要来解决在安装包的时候,互相冲突的问题 具体参考这里 简单说下,在定义资源的时候加上@ 例如: @package { & ...

  2. BZOJ2829信用卡凸包——凸包

    题目描述 输入 输出 样例输入 2 6.0 2.0 0.0 0.0 0.0 0.0 2.0 -2.0 1.5707963268 样例输出 21.66 提示 本样例中的2张信用卡的轮廓在上图中用实线标出 ...

  3. CodeCraft-19 and Codeforces Round #537 Div. 2

    D:即有不超过52种物品,求容量为n/2的有序01背包方案数.容易想到设f[i][j]为前i种物品已用容量为j的方案数,有f[i][j]=f[i-1][j-a[i]]*C(n/2-j+a[i],a[i ...

  4. 微信小程序——使用vue构建小程序【外传】

    文档 http://mpvue.com/mpvue/ 根据文档构建完成的页面如下 更多的,还要继续看下文档~

  5. Codeforces1101F Trucks and Cities 【滑动窗口】【区间DP】

    题目分析: 2500的题目为什么我想了这么久... 考虑答案是什么.对于一辆从$s$到$t$的车,它有$k$次加油的机会.可以发现实际上是将$s$到$t$的路径以城市为端点最多划分为最大长度最小的$k ...

  6. 【BZOJ5324】[JXOI2018]守卫(动态规划)

    [BZOJ5324][JXOI2018]守卫(动态规划) 题面 BZOJ 洛谷 题解 既然只能看到横坐标在左侧的点,那么对于任意一个区间\([l,r]\)而言,\(r\)必须被选. 假设\(r\)看不 ...

  7. 【BZOJ5213】[ZJOI2018]迷宫(神仙题)

    [BZOJ5213][ZJOI2018]迷宫(神仙题) 题面 BZOJ 洛谷 题解 首先可以很容易的得到一个\(K\)个点的答案. 构建\(K\)个点分别表示\(mod\ K\)的余数.那么点\(i\ ...

  8. Codeforces | CF1028C 【Rectangles】

    (这道题太简单啦...虽说我锤了一上午都没过...我能说这道题和\(CF1029C\)算是同一道题吗...) 按照时间顺序来说...\(CF1029\)在\(CF1028\)前面(而且\(CF1029 ...

  9. Atcoder | AT2665 【Moderate Differences】

    又是一道思路特别清奇的题qwq...(瞪了一上午才发现O(1)的结论...差点还想用O(n)解决) 问题可以转化为是否能够由\(f_{1}=a\)通过\(\pm x \in[c,d]\)得到\(f_{ ...

  10. luogu4162 最长距离 (dijkstra)

    相邻格子连双向边,如果一个点有障碍,那进它的边权就是1,否则是0 这样的话,两点间的最短路+[起始点有障碍],就是从一个点走到另一个需要清除的障碍的个数 求出最短路后枚举这两个点就可以了 然而30*3 ...