Есть ли какая-то причина, по которой атрибуты должны быть защищены / закрыты? - PullRequest
3 голосов
/ 29 июня 2010

Я "выучил" C ++ в школе, но есть несколько вещей, которые я не знаю, например, где или что компилятор может оптимизировать, кажется, я уже знаю, что inline и const могут немного повысить ...

Если производительность важна (например, игровое программирование), позволяет ли указание атрибутов класса не public (private или protected) компилятору создавать более оптимизированный код?

Поскольку все мои предыдущие учителя говорили, что это более «безопасно» или «предотвращать нежелательный или авторизованный доступ / поведение класса», но в конце я задаюсь вопросом, может ли установка атрибутов не public ограничить область действия и таким образом закрепите вещи.

Я не критикую своих учителей (если я), но урок программирования, в котором я учился, не был очень продвинутым ...

Ответы [ 3 ]

5 голосов
/ 29 июня 2010

Преподаватели были правы, когда говорили, что вам нужно использовать приватное и защищенное, чтобы скрыть реализацию и научить вас скрывать информацию вместо того, чтобы поддерживать сомнительную оптимизацию производительности. Попробуйте сначала подумать о подходящем дизайне, а затем о производительности, в 99% случаев это будет лучшим выбором (даже в сценариях, критичных к производительности). Узкие места в производительности могут появиться во многих непредсказуемых случаях, и их гораздо легче найти, если ваш дизайн надежен.

Однако, чтобы прямо ответить на ваш вопрос: любое сокращение области действия может помочь компилятору выполнить определенные оптимизации, и я не могу думать ни о каких моментах в настоящее время в отношении обеспечения приватности членов.

3 голосов
/ 29 июня 2010

Нет.Создание частных или защищенных членов не даст никаких преимуществ производительности;Конечно, преимущества вашего дизайна (сокрытие информации) огромны.

2 голосов
/ 29 июня 2010

Нет такой вещи как public, private и protected после компиляции вашего кода, так что это не может повлиять на производительность.

В машинном коде также нет такой вещи, как const (кроме, возможно, ROM), но компилятор может внести некоторые логические оптимизации в вашу программу, зная, может ли значение измениться (в некоторых ситуациях).

inline редко оказывает какое-либо влияние. Это просто предложение для компилятора, которое компилятор может игнорировать (и часто делает). Компилятор встроит функции так, как считает нужным.

...