const修饰符总结
- 1、什么是const?
const就是constant的缩写,意思是“恒定不变的”,它是定义只读变量的关键字,或者说const是定义常变量的关键字,常类型的变量或对象的值是不能被更新的
- 2、为什么引入const?
const推出的初始目的,就是为了取代预编译指令,消除它的缺点,同时继承它的优点
- 3、const有什么主要的作用?
(1)可以定义const常量,具有不可变性。例如:const int MAX = 100; int array[MAX];
(2)便于进行类型检查,使编译器对处理内容有更多了解,以消除一些隐患
例如:void f(const int i) {......}编译器就会知道 i 是一个常量,不允许修改。
(3)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面例子,如果在函数体内修改了 i ,编译器就会报错
例如:void f(const int i){ i = 1001;} error!
(4)为函数重载提供了一个参考
class A
{
void f(int i) { ...... } //一个函数
void f(int i) const { ...... } //上一个函数的重载.....
};
(5)提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
- 4、const的使用
const在实际中用得并不多,先列出如下const短小总结,const关键字修饰指针,const在*号的左边还是右边(左定值,右定向)
1.const int a; //a是一个常整形数
2.int const a; //a是一个常整形数
3.const int *a; //a是一个指向常整数型的指针(整形数是不可修改的,但指针可以)
4.int const *a; //a是一个指向常整数型的指针(同上)
5.int *const a; //a是一个指向整形数的常指针(指针保存内容不可修改)
6.int const * const a; //a是一个指向常整形数的常指针(指针指向的整形数是不可修改的,同时指针也是不可修改的)
(1)int const * ;
int const *a 和 const int *a意义一样。
从右往左看,进行解析,这个a是一个指针,而且是一个常量,类型是整形,称为指针常量
特点:*a指向一个整形的常量,但是不能通过修改p所指向内存单元的值,只能通过修改其所指向的对象,可称为指向常整形的指针
int data = 88;
const int number = 99;
const int *p1 = &number; p1 = &data; //允许通过编译,允许修改所指向的对象
*p1 = 10086; //不允许通过编译,无法通过指针修改内容
(2)int * const a;
从右往左看,一个常量a被定义为整形指针。可称为指向整形的常指针
特点:常量a是一个整型类型的指针,它能通过指针来进行修改其中的内容,但当它已经指向一个地址之后,便不能再指向其他地址,和int const*有区别
int data = 88;
int k = 99;
int * const p2 = &data; *p2 = 10010; //允许通过编译,允许通过指针修改内容;
p2 = &k; //不允许通过编译,无法修改所指向的对象;
(3)const int * const p;
从右往左看,结合上面两个,可以看做常量指针常量,即常量p是一个整形的指针,而且这个指针还是个常量
int data = 88;
int k = 99;
int const * const p3 = &data; p3 = &k; //不允许通过编译
*p3 = 4399; //不允许通过编译
const修饰符总结的更多相关文章
- C++中 容易忽视的const 修饰符
C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...
- [Reprint]C++函数前和函数后加const修饰符区别
c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...
- C++函数前和函数后加const修饰符区别
class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...
- [C++]const修饰符
Date: 2014-1-1 Summary: const 修饰符笔记 Contents: 1.const 修饰符 声明一个常量数据类型 , 在编译时就确定数据类型 2.const 与 指针 一般情况 ...
- C/C++ 中 const 修饰符用法总结
C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...
- const修饰符与函数
一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...
- const修饰符限定的常量
类型前加const修饰符限定变量为只读,称为常量,定义时必须初始化,且初始化后编译器不允许再修改常量的值. 一.常量的定义 const在类型前面 const int value: //value是co ...
- [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结
在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...
- 转载----C/C++ 中 const 修饰符用法总结
感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C ...
- C++ c++与C语言的区别(三目运算符,const修饰符)
//区别⑦:三目运算符(C++版本) #include<iostream> using namespace std; //三目运算符 C语言返回变量的值 C++语言是返回变量本身 void ...
随机推荐
- BUUCTF-镜子里的世界
镜子里面的世界 16进制看了下没有东西,binwalk分离了一下也没发现其他的,使用stegsolve查看即可发现.
- BUUCTF-签到题
签到题 很简单写在介绍里面了.
- 基于mysql实现group by取各分组最新一条数据
准备数据 SQL语句 SELECT * FROM admin WHERE id IN ( SELECT MAX( id ) FROM admin GROUP BY order_id ); 查询结果:
- NC21181 重返小学
NC21181 重返小学 题目 题目描述 时光依旧,岁月匆匆.转眼间,曾经的少年郭嘉烜已经长大成人,考上了一所优秀的大学--兰州大学.在经历了一年来自牛顿.莱布尼茨.拉普拉斯的精神洗礼后,他终于决 ...
- labview从入门到出家9(进阶篇)--串口通讯
Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...
- c# 反射专题—————— 介绍一下是什么是反射[ 一]
前言 为什么有反射这个系列,这个系列后,asp net 将会进入深入篇,如果没有这个反射系列,那么asp net的源码,看了可能会觉得头晕,里面的依赖注入包括框架源码是大量的反射. 正文 下面是官方文 ...
- .NET Core 实现后台任务(定时任务)BackgroundService(二)
原文连接:https://www.cnblogs.com/ysmc/p/16468560.html 在上一篇文档中说到使用 IHostedService 接口实现定时任务,其中,有小伙伴就问到,为什么 ...
- day08 集合API | 遍历_ | 泛型 |增强For循环
集合(续) 集合间的操作 集合提供了如取并集,删交集,判断包含子集等操作 package collection; import java.util.ArrayList; import java.uti ...
- GIS技术在医疗行业的应用:利用切片地图发布技术解决dmetrix数字病理切片在线浏览
最近一直在研究切片地图发布技术,解决各种矢量和栅格数据的切片地图制作和发布问题.这块的技术在土地评估和调查类公司中应用较多,因为他们经常需要使用各地地图,传统的文件管理方式很难适应工作现状,如果将各种 ...
- NOI / 2.1基本算法之枚举2673:比赛排名
总时间限制: 1000ms 内存限制: 65536kB 描述 5名运动员参加100米赛跑,各自对比赛结果进行了预测: A说:E是第1名. B说:我是第2名. C说:A肯定垫底. D说:C肯定拿不了第1 ...