C++ 常量(Constants in C++)
常量是指在程序执行期间其值不会改变的变量。常量有助于提高代码的可读性和维护性,并且可以防止意外修改这些值。C++ 提供了多种方式来定义常量,如 const 关键字、constexpr 关键字,以及 #define 宏定义。
1. 使用 const 关键字定义常量
const 关键字用于声明常量,它可以用于 基础数据类型、数组、指针、引用 等。
1.1 基本常量
#include <iostream>
using namespace std;
int main() {
const int MAX_VALUE = 100; // 声明一个常量
cout << "MAX_VALUE = " << MAX_VALUE << endl;
// MAX_VALUE = 200; // 错误:常量值不可修改
return 0;
}
输出:
MAX_VALUE = 100
说明:
- 常量在声明时必须初始化,并且在程序中不能修改其值。
const常量的作用范围取决于声明的位置,可以是 局部常量 或 全局常量。
2. 使用 constexpr 关键字定义常量
constexpr 用于声明常量表达式,表示该值在编译时已知,并且必须是 常量表达式。它常用于需要在编译时计算的常量。
2.1 constexpr 常量示例
#include <iostream>
using namespace std;
constexpr int square(int x) {
return x * x; // 编译时计算
}
int main() {
constexpr int size = 10;
int array[size]; // 使用 constexpr 常量定义数组大小
cout << "Square of 5 = " << square(5) << endl;
return 0;
}
输出:
Square of 5 = 25
说明:
constexpr常量必须是编译时已知的值。- 常量表达式 允许编译器在编译时计算结果,进而优化程序性能。
constexpr可以用于常量函数、常量数组大小等场景。
3. 常量指针与指针常量
常量不仅限于普通数据类型,还可以与指针一起使用,形成 常量指针 和 指针常量。
3.1 常量指针
常量指针指的是指针指向的地址不可修改,但指针本身可以改变。
#include <iostream>
using namespace std;
int main() {
int x = 10;
int y = 20;
int* const ptr = &x; // 常量指针,指向的地址不可变
cout << "*ptr = " << *ptr << endl;
// ptr = &y; // 错误:常量指针,不能改变指向地址
return 0;
}
3.2 指针常量
指针常量指的是指针本身的值不可修改,但指针指向的地址可以改变。
#include <iostream>
using namespace std;
int main() {
int x = 10;
int y = 20;
const int* ptr = &x; // 指针常量,指针的值不可变
cout << "*ptr = " << *ptr << endl;
ptr = &y; // 可以修改指向的地址
cout << "*ptr = " << *ptr << endl;
return 0;
}
3.3 常量指针与指针常量
#include <iostream>
using namespace std;
int main() {
int x = 10;
int y = 20;
const int* ptr1 = &x; // 指针常量
int* const ptr2 = &x; // 常量指针
// ptr1 = &y; // 可以修改指针地址
// *ptr2 = 30; // 错误:常量指针指向的值不可修改
cout << "*ptr1 = " << *ptr1 << endl;
cout << "*ptr2 = " << *ptr2 << endl;
return 0;
}
输出:
*ptr1 = 10
*ptr2 = 10
4. 使用 #define 宏定义常量
C++ 还可以使用 #define 宏来定义常量,通常用于全局常量。
4.1 宏定义常量示例
#include <iostream>
using namespace std;
#define PI 3.14159 // 定义常量 PI
int main() {
cout << "PI = " << PI << endl;
// PI = 3.14; // 错误:宏定义常量无法修改
return 0;
}
说明:
#define是预处理指令,不需要类型,直接替换文字。- 宏常量在编译时进行文本替换,可以用于任何地方。
- 不像
const和constexpr,宏常量没有类型安全,因此可能容易出现一些潜在问题。
5. 常量的作用与使用
- 增强代码可读性:通过常量的命名可以使代码更具可读性,易于理解常量的含义。
- 防止修改:常量值一旦声明,不允许修改,保证数据不被意外修改。
- 提高代码安全性:在多处使用常量而不直接使用数字(如 3.14),可以有效防止错误值的引入。
6. 总结
| 类型 | 关键字 | 说明 |
|---|---|---|
| 常量 | const | 允许定义常量,值不可修改 |
| 常量表达式 | constexpr | 编译时已知的常量,要求常量表达式 |
| 宏常量 | #define | 预处理器宏定义常量,值不可修改 |
常量是 C++ 编程中重要的工具,它能帮助开发者提高代码安全性、可读性和可维护性。通过合理使用常量,能够有效地避免意外修改,确保程序数据的稳定性。