Cuando estoy escribiendo una clase simple (sin plantilla), si la implementación de la función se proporciona "en su lugar", se trata automáticamente como inline
.plantilla de C++ y en línea
class A {
void InlinedFunction() { int a = 0; }
// ^^^^ the same as 'inline void InlinedFunction'
}
¿Qué pasa con esta regla cuando se habla de clases basadas en plantillas?
template <typename T> class B {
void DontKnowFunction() { T a = 0; }
// Will this function be treated as inline when the compiler
// instantiates the template?
};
Además, ¿cómo es la regla inline
aplicado a funciones de plantilla no anidados, como
template <typename T> void B::DontKnowFunction() { T a = 0; }
template <typename T> inline void B::DontKnowFunction() { T a = 0; }
lo que ocurriría en el primer y en el segundo caso aquí?
Gracias.
¿Puedo preguntar por qué quieres saber la respuesta a esta pregunta? He hecho bastantes C++ codificaciones, y no he enfrentado circunstancias en las que haya importado mucho. –
@ Benoît Lo mismo aquí, pero al escribir recientemente un fragmento de código basado en plantillas, comprendí que en realidad no sé qué sucede en el caso que he descrito. Entonces, ¿por qué no hacer una pregunta? :) –
No estoy seguro de lo que está buscando para la pregunta de la clase, pero estoy interesado en la respuesta: o) No creo que haya nada especial en DontKnowFunction() y en línea. Si el cuerpo es parte de la declaración de clase, entonces se considera implícito, de lo contrario, se usará en línea y el cuerpo estará fuera de la declaración. – skimobear