- 内容提要
- 前言
- 第 1 章 预备知识
- 第 2 章 开始学习 C++
- 第 3 章 处理数据
- 第 4 章 复合类型
- 第 5 章 循环和关系表达式
- 第 6 章 分支语句和逻辑运算符
- 第 7 章 函数——C++的编程模块
- 第 8 章 函数探幽
- 第 9 章 内存模型和名称空间
- 第 10 章 对象和类
- 第 11 章 使用类
- 第 12 章 类和动态内存分配
- 第 13 章 类继承
- 第 14 章 C++中的代码重用
- 第 15 章 友元、异常和其他
- 第 16 章 string 类和标准模板库
- 第 17 章 输入、输出和文件
- 第 18 章 探讨 C++新标准
- 附录 A 计数系统
- 附录 B C++保留字
- 附录 C ASCII 字符集
- 附录 D 运算符优先级
- 附录 E 其他运算符
- 附录 F 模板类 string
- 附录 G 标准模板库方法和函数
- 附录 H 精选读物和网上资源
- 附录 I 转换为 ISO 标准 C++
- 附录 J 复习题答案
3.2 const 限定符
现在回过头来介绍常量的符号名称。符号名称指出了常量表示的内容。另外,如果程序在多个地方使用同一个常量,则需要修改该常量时,只需修改一个符号定义即可。本章前面关于#define 语句的说明(旁注“符号常量—预处理器方法”)指出过,C++有一种更好的处理符号常量的方法,这种方法就是使用 const 关键字来修改变量声明和初始化。例如,假设需要一个表示一年中月份数的符号常量,请在程序中输入下面这行代码:
这样,便可以在程序中使用 Months,而不是 12 了(在程序中,12 可能表示一英尺有多少英寸或一打面包圈是多少个,而名称 Months 指出了值 12 表示的是什么)。常量(如 Months)被初始化后,其值就被固定了,编译器将不允许再修改该常量的值。如果您这样做,g++将指出程序试图给一个只读变量赋值。关键字 const 叫做限定符,因为它限定了声明的含义。
一种常见的做法是将名称的首字母大写,以提醒您 Months 是个常量。这决不是一种通用约定,但在阅读程序时有助于区分常量和变量。另一种约定是将整个名称大写,使用#define 创建常量时通常使用这种约定。还有一种约定是以字母 k 打头,如 kmonths。当然,还有其他约定。很多组织都有特殊的编码约定,要求其程序员遵守。
创建常量的通用格式如下:
注意,应在声明中对 const 进行初始化。下面的代码不好:
如果在声明常量时没有提供值,则该常量的值将是不确定的,且无法修改。
如果以前使用过 C 语言,您可能觉得前面讨论的#define 语句已经足够完成这样的工作了。但 const 比#defien 好。首先,它能够明确指定类型。其次,可以使用 C++的作用域规则将定义限制在特定的函数或文件中(作用域规则描述了名称在各种模块中的可知程度,将在第 9 章讨论)。第三,可以将 const 用于更复杂的类型,如第 4 章将介绍的数组和结构。
提示:
如果读者在学习 C++之前学习过 C 语言,并打算使用#define 来定义符号常量,请不要这样做,而应使用 const。
ANSI C 也使用 const 限定符,这是从 C++借鉴来的。如果熟悉 ANSI C 版本,则应注意,C++版本稍微有些不同。区别之一是作用域规则,这将在第 9 章讨论;另一个主要的区别是,在 C++(而不是 C)中可以用 const 值来声明数组长度,第 4 章将介绍一些这样的例子。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论