строку и в другом месте он много раз применяется, может ли компилятор оптимизировать это и выполнить его только 1 раз и сохранив значение?
В общем случае нет.
константный метод не меняет свой объект, но то что он всегда возвращает одно и тоже, вроде такого никогда не было
Ну компилятор в некоторых случаях может определить, будет меняться строка, или же нет.
если он видит описание класса
Для этого он ещё должен, как минимум, доказать, что функция — чистая.
Просто скинь пример кода
не думай о том, оптимизируется что-то или нет, компилятор сделает все возможное
можешь сравнить ассемблеры, если очень хочется поковыряться, на godbolt
Для этой оптимизации для начала нужен константный объект
Т.е. с ним будет, а без - нет? Даже если все значения, с которыми работает данный метод константы?
Будет ли оптимизация - я гарантировать не могу... (Никто не может)
Даже разработчики компилятора?
Это Вы про другое говорите.
это страшные люди, они точно знают ответ, но точно ли ты хочешь знать то, как оно работает?
А какого компилятора? (Их много и оптимизаторы у них существенно разные)
Ну со всеми компиляторами это не проверить, т.к. это вроде не описано в стандарте и каждый компилятор может поступать по разному
Святой Стандарт выше всех разработчиков компилятора
Чтобы исключить промежуточные вызовы Вам нужно отсутствие зависимости от состояния и неизменность состояния самим вызовом, если грубо. Атрибут const выше как раз это сообщает компилятору (он нестандартен).
атрибут const именно в этом смысле ничего компилятору не сообщает если он видит тело функции он и так может его проанализировать а если не видит, то он вынужден предполагать, что там может быть const_cast
или вы имели ввиду тот что там на полях данных стоит?
Обсуждают сегодня