vue template c++ templates inline-method

template - Plantilla C++ y en línea



inline-template vue (3)

Desde que crea una instancia, obtiene una clase, esa función es como una función de miembro ordinario. Se define en esa clase, por lo que la función está automáticamente en línea.

Pero realmente no importa mucho aquí. Puede definir plantillas de funciones o miembros de plantillas de clases varias veces en un programa de todos modos, no necesita en inline para contarle al compilador sobre eso, como en el caso de no plantilla.

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 en inline .

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 se aplica la regla en inline a las funciones de plantillas no anidadas, como

template <typename T> void B::DontKnowFunction() { T a = 0; } template <typename T> inline void B::DontKnowFunction() { T a = 0; }

¿Qué pasaría en el primer caso y en el segundo aquí?

Gracias.


La palabra clave en línea no es una "regla". Es simplemente una sugerencia / sugerencia para el compilador y lo que hace con él depende completamente de ello y de su implementación. Con esto en mente, no es posible saber qué sucederá con sus ejemplos. El compilador puede de hecho alinear todos, algunos o ninguno de ellos.


Las funciones de plantilla hasta donde yo sé están automáticamente en línea. Sin embargo, la realidad es que la mayoría de los compiladores modernos regularmente ignoran el calificador en línea. Es muy probable que la heurística optimizadora del compilador haga un mejor trabajo al elegir qué funciones incluir en línea que un programador humano.