常量的类型与用途
在编程中,常量是一种在程序执行过程中不能被修改的值。
C++支持两种不同类型的常量:
- 命名常量:与标识符相关联的常量值,也称为符号常量
- 字面量常量:与标识符无关的常量值
定义常量的方法
在C++中,有三种定义命名常量的方法:
- 常量变量(本课介绍)
- 对象类宏(在预处理器中使用)
- 枚举常量(在后续课程中介绍)
常量变量详解
基本用法
int main()
{
int x { 4 }; // x 是一个非常量变量
x = 5; // 使用赋值操作符将 x 的值改为 5
return 0;
}
常量变量的定义
使用const
关键字定义常量变量:
const double gravity { 9.8 }; // 推荐的 const 用法,放在类型之前
int const sidesInSquare { 4 }; // "east const" 风格,可以但不推荐
常量变量的使用规则
初始化要求
常量变量必须在定义时初始化:
int main()
{
const double gravity; // 错误:常量变量必须初始化
gravity = 9.9; // 错误:常量变量不能被修改
return 0;
}
函数参数与返回值
常量函数参数
#include <iostream>
void printInt(const int x)
{
std::cout << x << '\n';
}
int main()
{
printInt(5); // 5 将被用作 x 的初始化器
printInt(6); // 6 将被用作 x 的初始化器
return 0;
}
宏定义与常量变量的对比
预处理器宏示例
#include <iostream>
#define MY_NAME "Alex"
int main()
{
std::cout << "My name is: " << MY_NAME << '\n';
return 0;
}
宏定义的潜在问题
#include <iostream>
void someFcn()
{
#define gravity 9.8
}
void printGravity(double gravity) // 可能导致编译错误
{
std::cout << "gravity: " << gravity << '\n';
}
最佳实践与建议
常量使用原则
- 尽可能将变量定义为常量
- 优先使用常量变量而不是宏定义
- 将
const
关键字放在类型之前
多文件程序中的常量
在多文件程序中使用常量时的注意事项:
- 集中定义常量
- 使用适当的作用域
- 考虑使用内联变量
类型限定符说明
const限定符
- 用于声明常量变量
- 修改类型的行为
- 属于cv-限定符类别
volatile限定符
- 用于特殊场景
- 告知编译器值可能随时改变
- 较少使用
注意:本文中的代码示例均遵循现代C++标准,建议在实际编程中遵循这些最佳实践。