Ключевое слово const
создает константные переменные, которые нельзя изменять после инициализации. Это мощный инструмент для повышения надежности кода и защиты от случайных изменений данных.
const int MAX_SIZE = 100;
const float PI = 3.14159f;
Эффекты:
Есть несколько вариантов расположения const с указателями:
Указатель на константу:
const int* ptr = &var; // Данные нельзя изменить через ptr
Константный указатель:
int* const ptr = &var; // Указатель нельзя перенаправить
Константный указатель на константу:
const int* const ptr = &var; // Ничего нельзя изменить
void printArray(const int* arr, size_t size) {
// arr нельзя изменить внутри функции
}
Преимущества:
const char* getErrorMessage() {
return "Error occurred";
}
Применение:
Константные методы:
class MyClass {
public:
int getValue() const { // Не изменяет состояние объекта
return value;
}
private:
int value;
};
Константные объекты:
const MyClass obj;
obj.getValue(); // Можно вызвать только const-методы
Характеристика | C | C++ |
---|---|---|
Константные переменные | Обычно через #define | Предпочтительно const |
Константные параметры | Подобно C++ | Более строгая проверка |
Константные методы | Не поддерживается | Важная часть ООП |
Инициализация | Требует явной инициализации | То же самое |
Защита массива:
void processData(const int data[], int size) {
// data нельзя изменить
}
Константные ссылки:
void printObject(const MyClass& obj) {
// obj нельзя изменить, эффективно по памяти
}
Константные итераторы:
std::vector<int> vec;
const auto it = vec.begin(); // Итератор нельзя изменить
const int x = 5;
x = 10; // Ошибка компиляции
void func(const int* ptr);
int* p = ...;
func(p); // OK в C++, предупреждение в C
const int x = 5;
int* p = const_cast<int*>(&x); // Опасное приведение
constexpr - для вычислений на этапе компиляции:
constexpr double computeCircleArea(double r) {
return 3.14159 * r * r;
}
Резюмируем: const
— важнейший инструмент для создания надежного и безопасного кода. Он помогает предотвращать ошибки, документирует намерения программиста и позволяет компилятору делать дополнительные оптимизации. В современном C++ рекомендуется максимально широкое использование const везде, где это возможно.