在 C++ 中,const
关键字用于声明常量,表示某个变量或对象的值在初始化后不可改变。const
可以应用于多种上下文,包括变量、函数参数、成员函数和指针等。下面详细介绍 const
的各种用法:
1. 常量变量
const
可以用来声明常量变量,这些变量在初始化后不能被修改。
const int a = 10; // a 是一个常量,不能被修改
// a = 20; // 错误:不能修改常量
2. 常量指针
const
可以用于指针,表示指针所指向的数据是常量,或者指针本身是常量,或者两者都是常量。
-
指针指向常量数据:
const int* p = &a; // p 指向常量数据,不能通过 p 修改 a // *p = 20; // 错误:不能修改常量数据 p = &b; // 正确:可以改变 p 指向的地址
-
常量指针:
int* const p = &a; // p 是常量指针,不能改变 p 指向的地址 // p = &b; // 错误:不能改变常量指针的地址 *p = 20; // 正确:可以修改 p 指向的数据
-
常量指针指向常量数据:
const int* const p = &a; // p 是常量指针,指向常量数据 // *p = 20; // 错误:不能修改常量数据 // p = &b; // 错误:不能改变常量指针的地址
3. 常量引用
const
可以用于引用,表示引用所绑定的对象是常量。
const int a = 10;
const int& ref = a; // ref 是常量引用,不能通过 ref 修改 a
// ref = 20; // 错误:不能修改常量引用
4. 常量成员函数
const
可以用于成员函数,表示该成员函数不会修改类的成员变量。
class MyClass {
public:int getValue() const; // 常量成员函数
private:int value;
};int MyClass::getValue() const {return value; // 可以读取成员变量,但不能修改// value = 20; // 错误:不能在常量成员函数中修改成员变量
}
5. 常量参数
const
可以用于函数参数,表示传入的参数是常量,函数内部不能修改这些参数。
void print(const std::string& str) {// str = "Hello"; // 错误:不能修改常量参数std::cout << str << std::endl;
}
6. 常量表达式
C++11 引入了 constexpr
关键字,用于声明编译时常量表达式。
constexpr int add(int a, int b) {return a + b;
}constexpr int c = add(10, 20); // c 是编译时常量
7. 常量成员变量
const
可以用于类的成员变量,表示该成员变量在初始化后不能被修改。
class MyClass {
public:MyClass(int v) : value(v) {} // 初始化常量成员变量int getValue() const { return value; }
private:const int value; // 常量成员变量
};
总结
const
关键字在 C++ 中主要用于确保数据的不可变性,提高代码的可读性和安全性。合理使用 const
可以帮助编译器捕获潜在的错误,并使代码更加清晰和可靠。