Constants and immutability
Con.1
По умолчанию делайте объекты неизменяемыми
Причина
Неизменяемые объекты легче анализировать, поэтому объявляйте объекты не-const только тогда, когда необходимо изменить их значение. Предотвращает случайное или незаметное изменение значения.
Пример
for (const int i : c) cout << i << '\n'; // только чтение: const
for (int i : c) cout << i << '\n'; // ПЛОХО: только чтение
Исключения
Локальная переменная, возвращаемая по значению, которую дешевле переместить, чем скопировать, не должна объявляться const, поскольку это может принудить к ненужному копированию.
std::vector<int> f(int i)
{
std::vector<int> v{ i, i, i }; // const не нужен
return v;
}
Параметры функций, передаваемые по значению, редко мутируются, но и редко объявляются const. Чтобы избежать путаницы и множества ложных срабатываний, не применяйте это правило к параметрам функций.
void g(const int i) { ... } // педантично
Обратите внимание, что параметр функции — это локальная переменная, поэтому его изменения локальны.
Контроль
- Помечать не-
constпеременные, которые не изменяются (за исключением параметров — чтобы избежать ложных срабатываний, и возвращаемых локальных переменных)