Корректное использование const
const документирует отсутствие изменений и позволяет компилятору блокировать запись.
Что такое Корректное использование const?
const документирует отсутствие изменений и позволяет компилятору блокировать запись.
Точно выражайте данные только для чтения и изменяемые указатели.
Важные моменты
- Указатель ссылается на живой совместимый объект или равен null.
- Каждое собственное выделение освобождается ровно один раз.
- Явно выражайте ownership и const.
Примеры кода на C и C++
main.c
#include <stdio.h>
int sum(const int *values, size_t count) {
int total = 0;
for (size_t i = 0; i < count; ++i) total += values[i];
return total;
}
int main(void) {
const int values[] = {2, 4, 6};
printf("%d\n", sum(values, 3));
return 0;
}
12
C++
main.cpp
#include <array>
#include <iostream>
int sum(const std::array<int, 3>& values) {
int total = 0;
for (int value : values) total += value;
return total;
}
int main() {
const std::array values{2, 4, 6};
std::cout << sum(values) << '\n';
}
12
Сравнение C и C++
Pointer-to-const защищает значение, const pointer не меняет адрес. В C++ есть const member functions.
C
Ownership и очистка — соглашения, контролируемые программистом.
C++
Контейнеры и RAII связывают ownership и очистку с lifetime объекта.
Практические задания
Запустите обе версии и изменяйте их, сравнивая гарантии языков.
- Проверьте null и отказ выделения памяти.
- Используйте AddressSanitizer и UndefinedBehaviorSanitizer.
- Документируйте ownership каждого указателя.