const довольно редко помогает компилятору оптимизироваться.Вы должны иметь в виду, что const_cast
может использоваться где угодно для удаления константности из объекта (хотя на самом деле изменение результирующего объекта не всегда четко определено, это в некоторых случаях, и поэтому компилятор должен быть осторожнымо предположении, что если объект const передан в функцию, он не будет изменен)
Аналогично, ключевое слово mutable
все портит.Вы можете передать объект const функции, но что если этот объект содержит поле mutable
?
Компилятору нужно проделать большую работу, чтобы убедиться в том, что можно с уверенностью предположить, что объект действительно постоянен - и к тому времени, когда он выполнит всю эту проверку, ключевое слово const
не имеет большого значенияпотому что он мог бы провести такой же анализ обычного неконстантного объекта, а также определить, что он не изменяется и может рассматриваться как константа.
Я не скажу, что нетнесколько граничных случаев, когда ключевое слово const может включать новую оптимизацию, но в целом const
- это не оценка производительности, а корректность.Используйте его, чтобы ловить больше ошибок во время компиляции, а не ускорять ваш код.