Может ли C++ const вызывать методы с помощью оптимизатора?
Этот isocpp.org FAQ по константности гласит:
(...) давайте уточним, изменяет ли метод логическое состояние объекта. Если вы находитесь за пределами класса - вы обычный пользователь, каждый эксперимент, который вы можете выполнить (каждый метод или последовательность методов, которые вы вызываете), будет иметь одинаковые результаты (одинаковые возвращаемые значения, одинаковые исключения или отсутствие исключений) независимо от того, были ли вы первыми вызвал этот метод поиска. Если функция поиска изменила любое будущее поведение любого будущего метода (не только сделав его быстрее, но изменив результат, изменив возвращаемое значение, изменив исключение), тогда метод поиска изменил логическое состояние объекта - это мутатор. Но если метод поиска не изменил ничего, кроме, возможно, ускорения некоторых вещей, то это инспектор.
Кажется, это подразумевает, что компилятор может предполагать, что вызовы инспекторов могут быть свободно переупорядочены, если они не включают в себя записи в volatiles/ вызовы функций библиотеки IO (или, возможно, даже кэширование и пропуск). Это тот случай?
Если ответ отрицательный, есть ли ситуация, в которой константность позволит провести некоторую оптимизацию, позволив компилятору предположить что-то, чего он не может доказать? (кажется, доказательство того, что объект может быть постоянным, тривиально, но, возможно, это усложняется при передаче ссылок?)