C++之const关键字探究
一. const修饰常量
const用于修饰变量,将变量变为常量(常量一旦定义,就不可以修改)
编译器在程序的编译时期做的检查
例,已知半径求圆的面积中π\piπ应该是一个常量
可以采取宏定义的方式,但π\piπ的类型无法指明:
若采取const定义常量的方式,则可指明π\piπ的类型:
尝试对const定义的常量进行修改则报错:
二. const修饰指针
const T∗\ast∗或T const∗\ast∗表示不能修改指针指向的内容,但是指针本身的值是可以修改。(常量指针)(底层const)
T∗\ast∗ const表示该指针是一个常量,意味指针本身的值不能被修改,但是指针指向的内容可以修改。(指针常量)(顶层const)
const T∗\ast∗ const表示指针指向的内容及指针本身的值均不能改变。
(记忆口诀:厂底指顶,谁在前谁不能修改)
情况一,报错:用const修饰指针指向的内容,尝试修改指针指向的内容
(注意:const T∗\ast∗和T const∗\ast∗写法是等价的)
情况一,编译通过:用const修饰指针指向的内容,尝试修改指针本身的值
情况二,报错:用const修饰指针本身的值,尝试修改指针本身的值
情况二,编译通过:用const修饰指针本身的值,尝试修改指针指针指向的内容
情况三,报错:用const修饰指针本身的值和指针指向的内容,尝试修改指针本身的值和指针指向的内容
所以第三种情况是最为严格的情况
——《Effective C++》中文版 Page 17
三. const修饰函数
const在函数中根据修饰位置分三种:
const int func(const int a) const ;
1. 修饰返回值 const int func( ) ; 不能修改返回值。
2. 修饰函数形参 int func(const int a) ; 函数体内不能修改形参 a 的值。
3. 修饰类的成员函数 int func( ) const ; 函数体内不能修改成员变量的值,增加程序的健壮性或鲁棒性。(下面的第四小节)
四. const修饰成员函数(常成员函数)和const修饰对象
作用:无法修改数据成员,一般用来修饰“取,显示,获得数据”的函数
本质:this 指针的类型:const T∗\ast∗ const
意义:让编译器提醒开发者该函数不能修改类的成员变量,用于const对象(引用或指针)。
const对象只能调用const成员函数不能调用普通成员函数;
而普通对象既可以调用const成员函数也可以调用普通成员函数。
例:
上例代码:
//小问学编程
#include<iostream>using namespace std;class Point
{public:Point(float a=0,float b=0);void move(float a,float b);//偏移量void print()const;//const成员函数
private:float x;float y;
};Point::Point(float a,float b):x(a),y(b){}void Point::move(float a,float b)
{x+=a;y+=b;
}void Point::print()const{cout<<"("<<x<<","<<y<<")";}int main()
{const Point p(2,2);//const对象p.print(); //正确p.move(1,1);//错误return 0;
}
const关键字的作用总结:
1. const定义常量 const float pi=3.14 ;其值不能被改变。(注:const常量在定义的时候就必须同时赋好值)
2. const与指针 常量指针和指针常量。
3. const与函数
const int func(const int a) const ;
a. 修饰形参时,形参不能被修改。
b. 修饰成员函数时,函数体内不能修改成员变量的值。
4. const对象
const Point p ; 常量对象
a. const对象只能调用const成员函数,不能调用普通成员函数。
b. 普通对象既可以const成员函数也可以调用普通成员函数。
——《Effective C++》中文版 Page 26
C++之const关键字探究相关推荐
- C++之static关键字探究
一. 静态局部变量和静态全局变量 用一个C语言的简单例子来说明: 总结: 1. 静态局部变量储存在静态储存区: 2. 静态局部变量在函数结束后内存空间不会被回收,下一次调用函数时使 ...
- c++中的const关键字
1.const的符号表机制探究 c语言中的const是一个冒牌货,c++中的const才是一个真正的常量.原因分析:c语言中的const将重新分配一块内存空间.c++编译器对const关键字做了特殊处 ...
- C++中的const关键字(zz)
[补充]mutable关键字 有时我们希望类的数据成员即使在const成员函数中,依然是可以修改的,这时就可以把它们声明为mutable来实现.这样的应用,比如记录各种操作的调用次数,这时,即使在co ...
- c++语言关键字大全,C++语言const 关键字使用方法图文详解
之前一直在学习C/C++,关于const的使用,这里出现一点,那里出现一点.知识用时方恨少,这一段时间正好各种笔试题,其中关于const的用法也是层出不穷,所以疲于在书本上各种翻,这里汇总一下,加深自 ...
- C语言之头文件,static与const关键字
[前言] 最近几个月在做一个C语言代码重构的项目,过程中也让我对之前在书本上学习到的东西有些补充和巩固,在本博中总结记录下,梳理下零碎的知识点和经验也加深印象,书写是为了更好地思考.平时也都是用印象笔 ...
- C 语言编程 — const 关键字
目录 文章目录 目录 const 关键字 修饰常量 修饰指针 修饰函数形参 修饰函数返回值 const 关键字 const 是 Constant(常量)的简写,有 3 大作用: 修饰常量,说明该常量的 ...
- final关键字_Dart核心语言基础const关键字与final关键字的区别
题记:不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼搏过,尽力过,一切问心无愧 本文描述 Dart 中 const 关键字与 final 关键字的基本使用知识点以及对比区别. Dart核心基 ...
- 【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )
文章目录 一.const 普通用法 二.常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三.指针常量 ( 指针不能被修改 ) 三.指向 常量 的 指针常量 四.const 在 * 左 ...
- C/C++ static和const关键字的作用
static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...
最新文章
- ABAP性能实例七例
- 修改CentOS yum源
- reporting services 导出pdf格式优化
- java for 嵌套_Java中的for循环嵌套
- POJ2891 Strange Way to Express Integers【扩展中国剩余定理】
- php页面调用时间戳,php--------获取当前时间、时间戳
- 华大 MCU 之五 SPI 从机 DMA 模式 配置(不能正常接收问题处理)
- Python with...as... 语法深入解析
- access和python哪个难学-access和python学哪个好一点
- 串口服务器应用领域及应用方案详解
- linux下计算目录文件和,统计Linux 中文件和文件夹/目录的数量(示例代码)
- Elasticsearch查询速度为什么这么快?
- Cloudera Manager Agent 的 Parcel 目录位于可用空间小于 5.0 吉字节 的文件系统上。 /opt/cloudera/parcels(可用:5.0 吉字节 (12.74%)
- 模板方法模式--我们一起下饺子
- 2020-12-22 ACM集训一(二维数组与结构体)
- 虚幻商城人物替换默认小白人(不同骨骼模型人物公用一套动画)
- 网易云音乐 2.1.0
- speex进行音频去噪
- Java贪吃蛇暂停怎么做_Java实现贪吃蛇游戏(1小时学会)
- 文献综述怎么写 ,一直没头绪写不出来怎么办?
热门文章
- 基于JAVA+SpringMVC+Mybatis+MYSQL的学校教务查询系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的宠物商城管理系统
- 洛谷 P1080 国王游戏
- 利用.NET绘图技术制作水晶按钮控件(转)
- jQuery 历史版本
- Java 8 函数接口详细教程
- python spacy [E050] Can't find model 'en_core_web_sm'
- DesiredCapabilities内容详解(摘)
- Network in Network----Global Average Pooling
- [bzoj] 1257 余数之和sum || 数论