2011-09-17 16 views
5

¿Permite al compilador alinearlo, sabiendo que solo las funciones de la misma clase pueden acceder a él? ¿O es solo para la conveniencia del programador?¿El modificador de acceso "privado" le da al compilador más espacio para la optimización?

+0

Cualquier compilador decente alineará un método no virtual cuando pueda y cuando tenga sentido. No tiene nada que ver con la accesibilidad ya que eso no modifica la implementación del método. –

+0

Iba a hacer la misma pregunta la semana pasada. No podría pensar en ningún ejemplo donde el compilador generaría código diferente porque una función es privada. ¿Algún ejemplo? – JohnPS

Respuesta

6

El compilador puede (pero no está obligado a) optimizar como usted sugiere, pero eso no es el punto. El punto de los modificadores de acceso es atrapar ciertas clases (sin juego de palabras) de errores de programación en tiempo de compilación. Las funciones privadas son funciones que, si alguien las llama desde fuera de la clase, sería un error , y desea obtener información al respecto lo antes posible.

(Siempre que formule la pregunta "¿podría el compilador realizar optimizaciones basadas en esta información disponible?", La respuesta es "sí, a menos que haya una regla específica en el estándar que diga que no está permitido" (como las reglas para volatile, cuyo propósito es inhibir las optimizaciones). Sin embargo, los compiladores no necesariamente molestan optimizando en función de cualquier información dada. No existe, después de todo, ningún requisito para que los compiladores hagan ninguna optimización en primer lugar ! Cuán inteligente es tu compilador, en la actualidad, depende en gran medida de cuánto tiempo estés dispuesto a dejarlo funcionar. El modo PGO de programa completo de MSVC es capaz de subrayar a través del envío de método virtual - adivina el objetivo más probable y retrocede a un regular llamada virtual en tiempo de ejecución si la suposición fue incorrecta, pero ralentiza las compilaciones al menos en un factor de dos).

+0

Solo para agregar que la única buena razón para hacer un método en línea es que es lo suficientemente pequeño. No tiene nada que ver con el lugar desde donde se llama. –

+0

excelente respuesta: D – slartibartfast

+0

¿Puede dar un ejemplo de cómo el compilador podría usar el hecho de que una función es privada para generar código diferente, optimizado de alguna manera? – JohnPS

4

Los especificadores de acceso forman parte del mecanismo de C++ para implementar los principios de OOP de encapsulación y abstracción y no de optimización para los compiladores.

Algún compilador inteligente puede implementar alguna optimización a través de él, pero no se lo exige el Estándar C++. El propósito de los especificadores de acceso no es la Optimización, sino facilitar las construcciones de lenguaje para los principios soportados por el lenguaje C++.

Cuestiones relacionadas