Среди прочего, одной из причин либерального использования const, которое я видел, является то, что, гарантируя, что значение не изменится, компилятор может более эффективно оптимизировать полученный код. Это кажется разумным (но я также слышал, что выгоды от этого несколько минимальны).
В любом случае, будет ли это так же при работе с классами / объектами без состояния? Можете ли вы разумно ожидать даже незначительного ускорения от маркировки объектов без состояния const, или современные компиляторы достаточно хороши, чтобы распознавать безгражданство и оптимизировать его независимо от того, имеет ли он отмеченное const или нет?
Не стесняйтесь отвечать либо с точки зрения конкретных компиляторов, либо с точки зрения компиляторов в целом.
Объект без сохранения состояния должен быть объектом без переменных-членов. const
Метод просто означает, что неявный this
указатель const
, Но если у вас нет переменных-членов, this
полезно только для вызова функций-членов, и его const
Ness просто определяет, какая перегрузка будет вызвана (возможно, вы не перегружаете функции-члены на const
когда нет состояния для мутирования). Поэтому мы не должны ожидать (но все же можем обнаружить!) Каких-либо различий в оптимизации, когда нет состояния для изменения и когда все функции-члены вызываются через this
(если это даже полиморфный класс) будет const
тем не мение.
Конечно, самое важное, что следует учитывать при оптимизации, — это конкретный вариант использования вашего конкретного компилятора на вашей конкретной платформе. Только тогда вы точно будете знать, имеет ли это значение.
Достаточно ли хороши современные компиляторы, чтобы распознать безгражданство и оптимизировать его независимо от того, помечен ли он как const или нет?
Там нет ничего, чтобы оптимизировать! У вас нет доступа к данным, поэтому объект const
на 100% бессмысленно.