const
修饰的基本数据类型变量,值不可改变。
const type variable = value;
不可变性,增加代码可读性。
定义不可修改的常量。
全局常量、配置项。
必须在声明时初始化。
#include <iostream>
using namespace std;
int main() {
const int maxCount = 10;
cout << "Max count: " << maxCount << endl;
// maxCount = 20; // 错误:不能修改 const 变量
return 0;
}
Max count: 10
适用于定义程序中的固定值,提高安全性和可维护性。
使指针指向的数据或指针本身成为常量。
const type* ptr; // 指针指向的数据是常量
type* const ptr; // 指针本身是常量
const type& ref; // 引用的是常量
防止通过指针或引用修改数据。
保护指向的数据或保护指针本身不被更改。
函数参数,防止指针/引用意外修改数据。
区分指针指向常量和常量指针。
#include <iostream>
using namespace std;
void display(const int* ptr) {
cout << "Value: " << *ptr << endl;
}
int main() {
int value = 10;
const int* ptrToConst = &value; // 指向常量的指针
display(ptrToConst);
int* const constPtr = &value; // 常量指针
*constPtr = 20;
display(constPtr);
return 0;
}
Value: 10
Value: 20
用于保护数据不被意外修改,提高代码的安全性。
函数参数、返回值或成员函数使用 const
。
void func(const type arg); // 参数是常量
const type func(); // 返回常量
type func() const; // 常量成员函数
保护函数参数和返回值,确保对象成员函数不修改对象状态。
防止函数修改输入数据,保证成员函数不改变对象状态。
当不希望函数更改数据或对象状态时。
常量成员函数不能修改任何成员变量。
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass(int val) : value(val) {}
int getValue() const { return value; } // 常量成员函数
private:
int value;
};
void printValue(const MyClass& obj) {
cout << "Value: " << obj.getValue() << endl;
}
int main() {
MyClass obj(10);
printValue(obj);
return 0;
}
Value: 10
确保数据和对象状态的安全性和稳定性。
在类定义中使用 const
修饰成员变量和成员函数。
class MyClass {
public:
MyClass(int val) : constMember(val) {}
int getConstMember() const { return constMember; } // 常量成员函数
private:
const int constMember; // 常量成员变量
};
增强类封装,确保数据安全。
定义不可变的成员变量和不改变对象状态的成员函数。
设计不可变成员或保证成员函数的安全性。
常量成员变量必须在构造函数初始化列表中初始化。
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass(int v) : constMember(v) {}
int getConstMember() const { return constMember; }
private:
const int constMember;
};
int main() {
MyClass obj(10);
cout << "Const member: " << obj.getConstMember() << endl;
return 0;
}
Const member: 10
在类中使用 const
提高成员变量和函数的安全性和稳定性。
定义不可改变的类对象。
const ClassName object;
常量对象只能调用其常量成员函数。
确保对象状态不被更改。
需要只读访问对象时。
常量对象不能调用非常量成员函数。
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass(int v) : value(v) {}
int getValue() const { return value; }
private:
int value;
};
int main() {
const MyClass constObject(10);
cout << "Const object value: " << constObject.getValue() << endl;
return 0;
}
Const object value: 10
使用 const
修饰类对象可确保对象的完整性和不变性,适合只读场景。