При работе с объектами, не имеющими состояния, есть ли еще преимущество в производительности для их маркировки const?

Среди прочего, одной из причин либерального использования const, которое я видел, является то, что, гарантируя, что значение не изменится, компилятор может более эффективно оптимизировать полученный код. Это кажется разумным (но я также слышал, что выгоды от этого несколько минимальны).

В любом случае, будет ли это так же при работе с классами / объектами без состояния? Можете ли вы разумно ожидать даже незначительного ускорения от маркировки объектов без состояния const, или современные компиляторы достаточно хороши, чтобы распознавать безгражданство и оптимизировать его независимо от того, имеет ли он отмеченное const или нет?

Не стесняйтесь отвечать либо с точки зрения конкретных компиляторов, либо с точки зрения компиляторов в целом.

3

Решение

Объект без сохранения состояния должен быть объектом без переменных-членов. const Метод просто означает, что неявный this указатель const, Но если у вас нет переменных-членов, this полезно только для вызова функций-членов, и его constNess просто определяет, какая перегрузка будет вызвана (возможно, вы не перегружаете функции-члены на const когда нет состояния для мутирования). Поэтому мы не должны ожидать (но все же можем обнаружить!) Каких-либо различий в оптимизации, когда нет состояния для изменения и когда все функции-члены вызываются через this (если это даже полиморфный класс) будет const тем не мение.

Конечно, самое важное, что следует учитывать при оптимизации, — это конкретный вариант использования вашего конкретного компилятора на вашей конкретной платформе. Только тогда вы точно будете знать, имеет ли это значение.

1

Другие решения

Достаточно ли хороши современные компиляторы, чтобы распознать безгражданство и оптимизировать его независимо от того, помечен ли он как const или нет?

Там нет ничего, чтобы оптимизировать! У вас нет доступа к данным, поэтому объект const на 100% бессмысленно.

1

По вопросам рекламы [email protected]