从Java到C++——常量的使用规则
常量是一种标识符,它的值在执行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。
C++ 语言除了 #define外还能够用const来定义常量(称为const常量)。
一、为什么须要常量
假设不使用常量,直接在程序中填写数字或字符串。将会有什么麻烦?
(1).程序的可读性(可理解性)变差。程序猿自己会忘记那些数字或字符串是什么意思。用户则更加不知它们从何处来、表示什么。
(2).在程序的非常多地方输入相同的数字或字符串,难保不发生书写错误。
(3).假设要修改数字或字符串,则会在非常多地方修改,既麻烦又easy出错。
l 【规则1】 尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。
比如:
#define MAX 100 // C语言的宏常量
const int MAX = 100;// C++ 语言的const常量
const float PI = 3.14159;// C++ 语言的const常量
二、const和#define的比較
C++ 语言能够用const来定义常量。也能够用 #define来定义常量。
可是前者比后者有很多其他的长处:
(1).const常量有数据类型。而宏常量没有数据类型。
编译器能够对前者进行类型安全检查。而对后者仅仅进行字符替换,没有类型安全检查。而且在字符替换可能会产生意料不到的错误(边际效应)。
(2).有些集成化的调试工具能够对const常量进行调试,可是不能对宏常量进行调试。
l 【规则1】在C++ 程序中仅仅使用const常量而不使用宏常量,即const常量可全然代替宏常量。
三、常量定义规则
l 【规则1】须要对外公开的常量放在头文件里,不须要对外公开的常量放在定义文件的头部。为便于管理。能够把不同模块的常量集中存放在一个公共的头文件里。
l 【规则2】假设某一常量与其他常量密切相关。应在定义中包括这样的关系,而不应给出一些孤立的值。
比如:
const float RADIUS = 100;
const float DIAMETER = RADIUS * 2;
四、类中的常量
有时我们希望某些常量仅仅在类中有效。
由于#define定义的宏常量是全局的,不能达到目的,于是想当然地认为应该用const修饰数据成员来实现。const数据成员的确是存在的,但其含义却不是我们所期望的。const数据成员仅仅在某个对象生存期内是常量。而对于整个类而言却是可变的,由于类能够创建多个对象。不同的对象其const数据成员的值能够不同。
不能在类声明中初始化const数据成员。
下面使用方法是错误的,由于类的对象未被创建时,编译器不知道SIZE的值是什么。
class A
{…
const int SIZE = 100; // 错误,企图在类声明中初始化const数据成员
int array[SIZE]; // 错误。未知的SIZE
};
const数据成员的初始化仅仅能在类构造函数的初始化表中进行。比如
class A
{…
A(int size); // 构造函数
const int SIZE ;
};
A::A(int size) : SIZE(size) // 构造函数的初始化表
{…
}
A a(100);// 对象 a 的SIZE值为100
A b(200);// 对象 b 的SIZE值为200
如何才干建立在整个类中都恒定的常量呢?
有两种方法,一是用类中的枚举常量来实现;二是将const定义为static类型。
比如
方法一:
class A
{…
enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量
int array1[SIZE1];
int array2[SIZE2];
};
方法二:
class A
{//…static const int SIZE1 = 100; // 枚举常量static const int SIZE2 = 200; // 枚举常量int array1[SIZE1]; int array2[SIZE2];
};
枚举常量不会占用对象的存储空间,它们在编译时被所有求值。枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。
转载于:https://www.cnblogs.com/gavanwanggw/p/6957217.html
从Java到C++——常量的使用规则相关推荐
- Java中类、常量、变量、方法名等命名规则
Java中类.常量.变量.方法名等命名规则 命名规则: 命名由字母.数字.下划线.美元符号($)构成. 命名不可以数字作为开头. 长度无限制,但不可存在空格. 大小写所表述内容含义不同. 命名不可与J ...
- Java 基础 之 常量
转载于 : http://www.verejava.com/?id=16992564786810 /* java中常量分为以下几种 1. 整型常量 2. 浮点数常量 3. 字符常量 4. 布尔型常量 ...
- java 定义一组常量用什么最好_Java语言中定义常量注意事项解析
一.常量定义的基本注意事项. 在Java语言中,主要是利用final关键字(在Java类中灵活使用Static关键字)来定义常量.当常量被设定后,一般情况下就不允许再进行更改.如可以利用如下的形式来定 ...
- 【二】Java变量与常量
Java变量与常量 1. 标识符 2. 关键字 3. 变量 4. 数据类型 4.1 进制表示 4.2 变量声明 4.3 赋值及变量定义 4.4 浮点型字面值 4.5 字符型字面值 4.6 ASCII码 ...
- java标识符命名_Java标识符命名规则
经常在网上看到一些代码对标识符的命名都不大规范,这次特地整理一下java中各类标识符的命名规则,希望对大家有所帮助. 一.标识符命名规则 1.标识符用作给变量.方法和类命名. 2.以字母.下划线&qu ...
- JAVA 定义全局常量码表_【Java基础】java常量是什么?
ava常量是什么? JAVA常量就是在程序中固定不变的值,是不能改变的数据.例如数字1.字符"a".浮点数3.2等.在Java中,常量包括整型常量.浮点数常量.布尔常量.字符常量等 ...
- java(Hello World) 常量 变量和注意事项
一.java的入门程序 java语言的简单介绍 关于java语言的特点: (1) 简单性 和c++相比,java没有头文件.指针.运算符重载等,java语言相当于是一个比较纯净版的c++. (2) 面 ...
- java 静态区在jvm哪里,JDKJREJVM这三者的联系与区别///java跨平台///堆栈常量区静态区...
JDKJREJVM这三者的联系与区别///java跨平台///堆栈常量区静态区 JDK,JRE,JVM这三者的联系与区别///java跨平台///堆.栈.常量区.静态区.方法区的区别 ---复习day ...
- JAVA教程之常量与变量
变量和常量作为Java语言中最基础的元素,它是我们保存数据,以及传递数据的常用形式.如果之前有学习过其他编程语言,对此应该较熟悉.下面,让我们一起学习常量和变量吧! 一.常量的认识和使用 1.常量就是 ...
最新文章
- php preg_replace 正则替换图片路径
- channelartlist标签不能调用外部链接栏目的解决办法
- boost:验证Boost概念检查的class_requires 库应该在预期的时间内捕获错误
- Ext Designer Preview生成代码在html上显示步骤
- python列表有哪些操作_python列表的基本操作有哪些
- 你在为疯狂圣诞节海报做准备了么?
- word打印设置相关
- 程序员微信名昵称_推荐几个高逼格的微信昵称?
- LiveNVR监控流媒体Onvif/RTSP功能-Onvif 发现以及探测通过ONVIF添加摄像头监控直播及云台控制
- c语言考场排座系统,具才考场座次编排系统
- intent跳转和转场动画
- OpenCV开发笔记(六十七):红胖子8分钟带你深入了解特征点暴力匹配(图文并茂+浅显易懂+程序源码)
- html设置ie9兼容性视图,ie9浏览器设置兼容性视图在哪里设置
- 一个简单好用的磨皮祛斑算法理论和python实现
- UML中各图形或图标表示的意思
- 高等数学(第七版)同济大学 习题6-2 (后18题)个人解答
- F8BT, PFBT, PFO-BT cas:210347-52-7,齐岳提供聚合物光电材料
- 计算机学业水平考试反思总结8百,考试反思总结范文(精选5篇)
- 详解Unity中的Nav Mesh新特性|导航寻路系统 (二)
- w ndows7与windows10区别,电脑系统windows 7和windows 10有什么区别?哪个更好?
热门文章
- python支持向量机 股票_小蛇学python(4)利用SVM预测股票涨跌
- 深入解析软件测试行业!它是否存在前景和出路?
- matlab 非线性电感,基于Matlab/Simulink利用动态和静态电感等磁参数建立了一种开关磁阻电机的非线性磁参数模型...
- web表格在css中属性,CSS属性之表格(Table)_html/css_WEB-ITnose
- 北仑泰河中学2021高考成绩查询,【大柴中崛起】北仑四所中学高考揭晓。
- 解决Ubuntu下Qt Creator无法输入中文
- Ownership and Permissions
- lesson2 欧拉数值方法及推广
- pytorch输出分类结果并显示每个类别的概率
- 利用kaggle训练模型