Tema ventajas:
Las funciones inline tienen la ventaja de no tener la sobrecarga de saltar a la función, apilar los argumentos, luego retornar, desapilar y volver a saltar a donde estábamos.
Como se podrá ver, para funciones cortas, esto supone una gran ventaja.
bool positivo(int i){
return i>0;
}
inline bool positivo2(int i){
return i>0;
}
la función positivo va a tardar posiblemente más en realizar todo el tema de apilado y return, que la comparación. El inline te salva eso.
Añado algo: Según las optimizaciones con las que compiles, funciones sin inline definidas e implementadas en el mismo lugar, pueden ser convertidas en inline.
Tema returns:
Las funciones inline, se expanden como si fuesen macros, si. PERO lo hacen de una forma oscura y "misteriosa"
Tu ejemplo del return, no es correcto por el hecho que return devuelve a la función superior a la actual, no en la que te encuentras.
b=sfdf();
Eso si sería correcto para obtener un 0 en b.
Como ya he dicho, las funciones inline se expanden de forma similar a las macros, PERO con mucha diferencia. En este tema comentaba eso:
http://foro.elhacker.net/programacion_cc/estoy_aprendiendo-t322048.0.htmlPor otro lado, no tengo el conocimiento certero de como se expanden las funciones inline, pero una aproximación podria ser esta:
b=sfdf();
//se traduce por -->
{b=0}
Posiblemente los return se asignen dentro del código "empotrado" del inline a la variable que va a ser asignada. El código de la función, obviamente estará entre llaves.
Por otro lado, tenemos que pensar, que esto al fin y al cabo es trabajo del preprocesador, que simplemente traducirá esto a un código encerrado entre llaves (recordemos que esto crea el mismo tipo de ámbito de variables que en una función) en vez de una llamada a la misma.
De esta forma, el compilador, traducirá eso a código "llano" en vez de un salto a otra posición del código.