const 关键字在 C++ 中用于表示常量,可以应用于变量、指针、函数参数、成员函数等。使用 const 可以提高代码的可读性和安全性,防止意外修改数据。
1. 常量变量
const int x = 10;
在这个例子中,x 是一个常量整数,不能被修改。
2. 常量指针和指向常量的指针
- 指向常量的指针:
const int *ptr = &x;
ptr 是一个指向常量整数的指针,通过 ptr 不能修改所指向的值。
- 常量指针:
int y = 20;
int *const ptr2 = &y;
ptr2 是一个常量指针,指针本身的值(即指向的地址)不能修改,但可以通过 ptr2 修改所指向的值。
- 指向常量的常量指针:
const int z = 30;
const int *const ptr3 = &z;
ptr3 是一个指向常量整数的常量指针,既不能修改指针本身的值,也不能通过 ptr3 修改所指向的值。
3. 常量成员函数
在类中,常量成员函数保证不修改类的成员变量。
class MyClass {
public:
int getValue() const {
return value;
}
private:
int value = 42;
};
getValue 是一个常量成员函数,它不能修改 MyClass 类的成员变量。
4. 常量函数参数
使用 const 关键字可以确保函数参数在函数内部不会被修改。
void printValue(const int value) {
std::cout << value << std::endl;
}
在这个例子中,printValue 函数保证不会修改传入的参数 value。
5. 常量返回值
如果函数返回一个常量引用或指针,可以防止调用者修改返回的值。
const int& getConstValue() {
static int value = 100;
return value;
}
getConstValue 返回一个常量引用,调用者不能修改返回的值。
示例代码
以下是一个综合运用 const 关键字的示例:
#include <iostream>
class Example {
public:
Example(int val) : value(val) {}
// 常量成员函数
int getValue() const {
return value;
}
// 非常量成员函数
void setValue(int val) {
value = val;
}
private:
int value;
};
void printValue(const Example& ex) {
std::cout << "Value: " << ex.getValue() << std::endl;
}
int main() {
const int x = 10; // 常量变量
int y = 20;
const int *ptr1 = &x; // 指向常量的指针
int *const ptr2 = &y; // 常量指针
Example ex(42); // 隐式转换
printValue(ex); // 使用常量函数参数
ex.setValue(100);
printValue(ex);
return 0;
}
输出结果
Value: 42
Value: 100
这个示例展示了 const 关键字的各种用法,从常量变量到常量成员函数,以及如何通过函数参数使用 const 确保数据安全。
6. const 和指针的深入理解
以下示例展示了如何使用 const 关键字以及如何在不同情况下修改值:
#include <iostream>
int main() {
const int x = 10; // 常量变量
// x = 20; // 这行代码会报错
int a = 10;
int b = 20;
const int *ptr1 = &a; // 指向常量的指针
// *ptr1 = 15; // 这行代码会报错
ptr1 = &b; // 这行代码是合法的
int c = 30;
int d = 40;
int *const ptr2 = &c; // 常量指针
*ptr2 = 35; // 这行代码是合法的
// ptr2 = &d; // 这行代码会报错
int e = 50;
const int *const ptr3 = &e; // 指向常量的常量指针
// *ptr3 = 55; // 这行代码会报错
// ptr3 = &d; // 这行代码也会报错
std::cout << "x: " << x << std::endl;
std::cout << "a: " << a << ", b: " << b << std::endl;
std::cout << "*ptr1: " << *ptr1 << std::endl;
std::cout << "c: " << c << ", d: " << d << std::endl;
std::cout << "*ptr2: " << *ptr2 << std::endl;
std::cout << "e: " << e << std::endl;
std::cout << "*ptr3: " << *ptr3 << std::endl;
return 0;
}
输出结果
x: 10
a: 10, b: 20
*ptr1: 20
c: 35, d: 40
*ptr2: 35
e: 50
*ptr3: 50
这个示例展示了如何使用和修改 const 变量和指针。在使用 const 的情况下,了解哪些可以修改、哪些不能修改对于编写安全和稳定的代码非常重要。