¿Ventajas de un puntero a una función?

Iniciado por David8, 5 Abril 2014, 20:26 PM

0 Miembros y 1 Visitante están viendo este tema.

amchacon

Al reves, un string tiene que redimensionarse dinámicamente.

Ademas, desde cuando te importa la eficiencia?  ;D
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

ivancea96

He dicho que lo hago más rápido, no que sea más eficiente.
Además, en este ejemplo la eficiencia es absurda e innecesaria.

Enviado desde mi ST21i mediante Tapatalk

amchacon

Cita de: ivancea96 en  6 Abril 2014, 15:21 PM
He dicho que lo hago más rápido, no que sea más eficiente.
Además, en este ejemplo la eficiencia es absurda e innecesaria.

Enviado desde mi ST21i mediante Tapatalk
Estas comparando:

Código (cpp) [Seleccionar]
string t;
cin >> t;
if(t.size()==0) t='1'; //Evitar problemas en entrada

funcs[(t[0]-'1')%3](); //Llamamos a la función. "(t[0]-'1')%3" es solo para evitar que salga del rango 0-2


¿Con esto?

Código (cpp) [Seleccionar]
int N;
cin>>N;

if (cin.good())
    funcs(N%3);


Yo veo más corto el segundo, pero sobre gustos no hay nada escrito :-X
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

ivancea96

el el segundo habría que hacer un while y comparar hasta que la entrada sea correcta.
Y por cierto, ese no era el tema del post.

rir3760

Cita de: David8 en  6 Abril 2014, 12:47 PM¿una llamada a una función con un puntero a función es más rápida que una llamada "normal"?
En el caso de C (habrá que revisar los puntos finos de C++) no hay diferencia ya que una llamada a función requiere de un puntero, cuando se llama a una función utilizando su identificador o una expresión que la denote (identifique, haga referencia) ello genera el puntero necesario.

Un ejemplo sencillo:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int (*p)(const char *) = puts;
   
   p("puntero");
   puts("identificador ==> puntero");
   (*p)("expresion ==> puntero");
   
   return EXIT_SUCCESS;
}


----

Cita de: ivancea96 en  6 Abril 2014, 17:46 PMel segundo habría que hacer un while y comparar hasta que la entrada sea correcta.
En ambos. Pero como se trata de ejemplos ilustrativos no veo porque molestarse con validaciones (la idea es explicar otra parte del lenguaje, ya se agregaran cuando sean necesarias).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language