Предоставляет ли «закрытый» модификатор доступа компилятору больше возможностей для оптимизации? - PullRequest
5 голосов
/ 17 сентября 2011

Позволяет ли он компилятору встроить его, зная, что к нему могут обращаться только функции одного класса? Или это только для удобства программиста?

Ответы [ 2 ]

6 голосов
/ 17 сентября 2011

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

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

4 голосов
/ 17 сентября 2011

Спецификаторы доступа являются частью механизма C ++ для реализации ООП-принципов инкапсуляции и абстракции, а не оптимизации для компиляторов.

Некоторые интеллектуальные компиляторы могут реализовывать некоторую оптимизацию через него, но это не предписано для этого стандартом C ++.Целью спецификаторов доступа является не оптимизация, а упрощение языковых конструкций для принципов, поддерживаемых языком C ++.

...