2012-07-17 6 views
6

siempre trato de mantener la aplicación fuera de las cabeceras, por lo que para las plantillas y funciones inline, que suele hacer algo como esto¿Tengo que repetir la palabra clave inline en la implementación de la función


// File.h 
inline bool foo() 

#include "File.hpp" 

// File.hpp 

inline bool foo() 
{ 
    return 1; 
} 

Mi pregunta es, ¿qué tiene que decir la especificación de C++ sobre la repetición de la palabra clave en línea para la implementación real de la función? (como se muestra en este ejemplo)

Realmente no quiero hacer eso ya que se complica con un montón de funciones, y aunque mi compilador no se queja, me pregunto si el compilador aún acepta la sugerencia en línea. .

¿Alguien sabe?

+0

¿Ya no está en uso? – agibalov

+2

Un poco fuera de tema, pero no debería confiar realmente en _inline_ keyword, ya que desde la optimización, una función indicada en línea puede no ser una, y una función "normal" puede ser tratada como una en línea. – SingerOfTheFall

+1

Soy consciente de que es solo una pista, sí – Tomas

Respuesta

4

Tiendo a poner inline tan lejos de la interfaz como sea posible ya que es un detalle de implementación y no parte de la interfaz. Por lo tanto: omita el primer inline en la declaración. Y solo adjúntelo a la definición de la función. Para la inclusión de un compilador hpp, los ámbitos son irrelevantes con respecto a los en línea, ya que los archivos se tratan como concatenados. Vea también http://www.parashift.com/c++-faq/where-to-put-inline-keyword.html para una explicación más detallada.

4

Está bien, pero poner inline en el archivo fuente es incluso menos de una pista, porque las fuentes no son generalmente visibles para otras unidades de traducción. Si implementa la función fuera del encabezado, el compilador probablemente no podrá insertarla de todos modos.

El único uso práctico de inline, en mi opinión, es evitar la definición múltiple de funciones definidas en el encabezado.

+0

No lo puse en un archivo de origen, lo puse en un archivo que importé en el encabezado, básicamente metiéndolo al final de ese archivo de encabezado – Tomas

+0

No podría un Compilador Suficientemente Inteligente alinear la función en tiempo de enlace de todos modos? – millimoose

+0

Realmente no estoy muy seguro de eso. ¿Alguien sabe qué tan común es eso? – Tomas

Cuestiones relacionadas