Компилятор может (но не обязан) оптимизировать, как вы предлагаете, но это не точка .Точка доступа модификаторов заключается в отлове определенных классов (без каламбура) ошибок программирования во время компиляции.Закрытые функции - это функции, которые, если кто-то вызвал их извне класса, будут ошибкой , и вы захотите узнать об этом как можно раньше.
(В любое время, когда вы спроситена вопрос «может ли компилятор сделать оптимизации на основе этой информации, доступной для него», ответ «да, если в стандарте нет определенного правила, запрещающего это» (например, правила для volatile
, чьицель состоит в том, чтобы запретить оптимизацию.) Однако компиляторы не обязательно беспокоятся оптимизация, основанная на какой-либо конкретной части информации. В конце концов, компиляторам не требуется выполнять какую-либо оптимизацию в первую очередь!В настоящее время ваш компилятор в значительной степени зависит от того, как долго вы хотите его запускать: полностью программный режим MSVC PGO способен встроить через диспетчер виртуальных методов - он угадывает наиболее вероятную цель и падаетвернуться к обычному виртуальному вызову во время выполнения, если предположение было неверным - но замедляется dсобственные компиляции как минимум в два раза.)