目录
- 常量概述
const
关键字constexpr
关键字- 常量指针与指针常量
- 常量的初始化
- 常量表达式
- 常量与引用
- 参考资料
1. 常量概述
常量是值不可修改的变量,在程序运行过程中其值保持不变。常量可以是数字、字符、字符串等类型的值,它们在声明时就被赋予了一个固定的值,之后无法修改。常量的使用有助于提升代码的可读性、维护性并避免错误。
2. const
关键字
在 C++ 中,const
用于定义常量。const
使得指定变量变为只读,禁止修改该变量的值。
2.1 常量的定义
const int MAX_SIZE = 100; // 定义一个常量 MAX_SIZE,其值为 100
2.2 常量作为函数参数
使用 const
修饰函数参数,可以避免函数修改该参数的值。
void printValue(const int value) {
std::cout << "Value is: " << value << std::endl;
// value = 200; // ❌ 错误,不能修改常量值
}
2.3 常量与类成员
在类成员函数中,const
可以用来修饰函数,保证该函数不会修改类成员变量。
class MyClass {
public:
void printValue() const { // const 成员函数,不能修改成员变量
std::cout << "This is a constant member function." << std::endl;
}
};
3. constexpr
关键字
constexpr
是 C++11 引入的关键字,用于声明常量表达式,这些常量必须在编译时就能求值。它比 const
更严格,因为 constexpr
确保变量的值在编译时就已确定,而 const
则允许在运行时初始化。
3.1 constexpr
定义常量
constexpr int MAX_ARRAY_SIZE = 200; // 编译时已知的常量
3.2 constexpr
函数
constexpr
也可以用来修饰函数,确保该函数在编译时能够执行,并且返回值是常量。
constexpr int square(int x) {
return x * x;
}
int main() {
int result = square(5); // 编译时已计算结果
std::cout << "Square of 5 is: " << result << std::endl;
return 0;
}
⚠️ 注意:constexpr
函数中的所有表达式必须是常量,可以在编译时求值。
4. 常量指针与指针常量
指针常量与常量指针是常见的概念,它们帮助我们控制对内存地址的访问。
4.1 常量指针(Pointer to Constant)
常量指针是指向常量的指针,意味着指针指向的值不能被修改。
int a = 10;
const int *ptr = &a;
*ptr = 20; // ❌ 错误,不能修改常量值
4.2 指针常量(Constant Pointer)
指针常量是指针本身不能被改变,但指向的值可以修改。
int a = 10;
int b = 20;
int* const ptr = &a; // ptr 本身是常量,不能指向其他变量
*ptr = 30; // 可以修改 ptr 指向的值
4.3 常量指针常量(Constant Pointer to Constant)
这是一种更严格的情况,既指针不能改变,指向的值也不能改变。
int a = 10;
const int* const ptr = &a; // ptr 和 ptr 指向的值都不能修改
5. 常量的初始化
常量的初始化要求在声明时赋值,不能在之后更改。常量可以通过两种方式初始化:
- 直接初始化:通过等号
=
进行赋值。 - 括号初始化:使用括号
()
来进行初始化。
示例
const int MAX = 50; // 直接初始化
constexpr double PI = 3.14; // `constexpr` 常量初始化
6. 常量表达式
常量表达式是指在编译时能够计算得出的值。constexpr
可以用于常量表达式的定义,而 const
用于在运行时确定的常量。
6.1 constexpr
常量表达式
constexpr
保证表达式在编译时求值,这意味着常量的值必须在编译阶段已知。
constexpr int getSize() {
return 50; // 编译时已确定
}
int array[getSize()]; // 可以用 `constexpr` 表达式定义数组大小
7. 常量与引用
在 C++ 中,常量引用通常用于确保对对象的访问是只读的,且避免不必要的对象拷贝。
7.1 常量引用(const
引用)
常量引用允许通过引用访问常量,而不允许修改其值。
int x = 10;
const int &ref = x; // 常量引用,不允许修改 x 的值
// ref = 20; // ❌ 错误,不能通过常量引用修改值
7.2 常量引用与大型数据类型
使用常量引用能够避免对大型对象(如大型数组或结构体)的拷贝,提高程序性能。
struct LargeObject {
int data[10000];
};
void processData(const LargeObject& obj) {
// obj.data 不会被修改
}
8. 参考资料
总结
常量在 C++ 中具有以下特点:
const
关键字:定义常量变量,无法修改其值。constexpr
关键字:定义常量表达式,要求在编译时已知,严格要求常量值不可变。- 常量指针与指针常量:常量指针(指向常量的指针)与指针常量(指针本身不可改变)具有不同的用途。
- 常量引用:允许通过引用访问常量而不修改其值,特别适用于大型对象的传递。
合理使用常量能够提升代码的可靠性、可维护性,并避免意外的修改或错误!🚀
发表回复