Может ли C ++ const вызывать методы с помощью оптимизатора? - PullRequest
0 голосов
/ 27 ноября 2018

В этом FAQ по isocpp.org о константности говорится:

(...) давайте уточним, изменяет ли метод логическое состояние объекта.Если вы находитесь за пределами класса - вы обычный пользователь, каждый эксперимент, который вы можете выполнить (каждый метод или последовательность методов, которые вы вызываете), будет иметь одинаковые результаты (те же возвращаемые значения, те же исключения или отсутствие исключений), независимо от того, будете ли вы первымвызвал этот метод поиска.Если функция поиска изменила любое будущее поведение любого будущего метода (не только сделав его быстрее, но изменив результат, изменив возвращаемое значение, изменив исключение), то метод поиска изменил логическое состояние объекта - это мутатор.Но если метод поиска не изменил ничего, кроме, возможно, ускорения некоторых вещей, то это инспектор.

Этот , по-видимому, означает, что компилятор свободен принимать вызовы инспекторовмогут быть свободно переупорядочены, если они не включают в себя записи в volatiles / вызовы функций библиотеки IO (или даже могут быть кэшированы и пропущены).Так ли это?

Если ответ отрицательный, есть ли ситуация, в которой константность позволит провести некоторую оптимизацию, позволив компилятору предположить что-то, чего он не может доказать?(кажется, доказательство того, что объект может быть постоянным, тривиально, но, возможно, это усложняется при передаче ссылок?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...