Funciones en Línea en C++

Funciones en Línea
Información sobre la plantilla
Concepto:Desde el punto de vista de la ingeniería del software es una buena idea poner en práctica un programa como un conjunto de funciones, pero las llamadas de función involucran sobrecarga en tiempo de ejecución. C++ tiene funciones en línea que ayudan a reducir la sobrecarga por llamadas de función especial para pequeñas funciones.

Como funciona

Desde el punto de vista de la ingeniería del software es una buena idea poner en práctica un programa como un conjunto de funciones, pero las llamadas de función involucran sobrecarga en tiempo de ejecución. C++ tiene funciones en línea que ayudan a reducir la sobrecarga por llamadas de función especial para pequeñas funciones. El calificador inline colocado en definición de función antes del tipo de regreso de una función “aconseja” al compilador que genere una copia del código de la función “in situ”, a fin d evitar una llamada de función. La contrapartida es que en el programa se insertan muchas copias de código de la función, en vez de, cada vez que se llama a la función, tener una copia de la función a la cual pasarle el control. El compilador puede ignorar el calificador inline y típicamente así lo hará para todas, a excepción de las funciones más pequeñas.

Las funciones en línea ofrecen ventajas en comparación con las macros de preprocesador que expanden código en línea. Una ventaja es que las funciones inline son iguales a cualquier otra función de C++.

Las macros de preprocesador no aceptan verificación de tipo. Otra ventaja es que las funciones inline eliminan las efectos colaterales inesperados, asociados con un uso inapropiado de las macros de preprocesador. Las funciones inline pueden ser depuradas mediante un programa depurador.

Como utilizar una función en línea para calcular el volumen de un cubo

  1. include<iostream.h>

Inline flota cubo (const flota s){return s*s*s;} void main() {

cout << “Entra el lado del cubo:”;
 float lado;
  cin >> lado;
   cout << “El volumen del cubo con lado ” <<lado<< “is” <<cubo(lado)<<”\n”;

}


Macros de preprocesador y funciones en línea

  1. include <iostream.h>
  1. define Cuadrado_valido(x) (x) * (x)
  2. define Cuadrado_invalido(x) x * x

Inline int square(int x)(return x * x)

void main() {

cout <<”Cuadrado Valido(2 + 3) =”<<Cuadrado_valido(2+3)
cout <<”\nCuadrado invalido(2+3) =”<<Cuadrado_invalido(2+3)
cout <<”\n          square(2+3) =”<<square(2+3)<<”\n”;

}

Operador de resolución de alcance unario

Es posible declarar variables locales y globales con un mismo nombre. C++ dispone del operador de resolución de alcance unario (::) para tener acceso a una variable global cuando está en alcance una variable loca con el mismo nombre. El operador de resolución de alcance unario no puede ser utilizado para tener acceso a una variable del mismo nombre en un bloque externo.

Como utilizar el operador de resolución de alcance unario

  1. include <iostream.h>

float value = 1.2345;

void main () {

cout << “Valor local =” <<value <<”\nValor global =”<<: :value<<”\n”;

}


Fuentes

Bibliografía

  • Addison Wesley - C++ Network Programming Volume I - Mastering Complexity with ACE and Patterns
  • Como programar en C y C++ Tomo I