Я много раз читал, что принудительное использование const-корректности в вашем коде на C или C ++ является не только хорошей практикой в отношении удобства обслуживания, но также может позволить вашему компилятору выполнять оптимизацию. Однако я также прочитал полную противоположность: она совершенно не влияет на производительность.
Поэтому у вас есть примеры, когда правильная константа может помочь вашему компилятору улучшить вашу программу? s производительность?
const
не может улучшить производительность, потому что const_cast
и mutable
находятся в языке и позволяют коду конформно нарушать правила. Это становится еще хуже в C++11, где ваши данные const
могут быть, например, указателем на std::atomic
, что означает, что компилятор должен уважать изменения, сделанные другими потоками.
При этом для компилятора не составляет труда посмотреть на генерируемый им код и определить, действительно ли он записывает в данную переменную, и применить соответствующие оптимизации.
При всем этом, const
корректность - это хорошо с точки зрения сопровождаемости. В противном случае клиенты вашего класса могут сломать внутренние члены этого класса. Например, рассмотрим стандартную std::string::c_str()
-- если бы она не могла возвращать const-значение, вы могли бы возиться с внутренним буфером строки!
Не используйте const
по причинам производительности. Используйте его по соображениям сопровождаемости.
по моему опыту, нет
Для скалярных переменных компилятор способен определить, когда значение изменяется, и сам выполнить необходимую оптимизацию.
Для указателей массивов корректность const не является гарантией того, что значения действительно постоянны в присутствии потенциальных проблем с алиасингом. Следовательно, компилятор не может использовать модификатор const для оптимизации
если вы ищете оптимизацию, вам следует рассмотреть __restrict__
или специальные модификаторы/атрибуты функций: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
Немного устарело, но все еще применяется: http://www.gotw.ca/gotw/081.htm И еще: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/