you una tube todas switch programacion las funciones funcion ejemplos declara como ats c++ c++11 gotw

una - todas las funciones de c++



El análisis más irritante de C++ otra vez (2)

Tomado directamente de http://herbsutter.com/2013/05/09/gotw-1-solution/

Mientras widget w(); es claro para mí, no tengo idea de cómo puede el código siguiente ser una declaración de función?

// same problem (gadget and doodad are types) // widget w( gadget(), doodad() ); // pitfall: not a variable declaration

¿Cómo es esto posible?


En una declaración de función, los argumentos de type array decay en punteros al primer elemento, los argumentos de tipo función decaen en un puntero de función, por lo que la firma sería:

widget w( gadget(*)(), doodad(*)() );

Es decir, una función que toma como primer argumento un puntero a una función que no toma argumentos y devuelve el gadget , que toma como segundo argumento un puntero a una función que no toma argumentos y devuelve un doodad y que la función devuelve un widget

Hay casos aún más interesantes o confusos, como:

// assume ''x'' is a variable defined somewhere: widget w(gadget(x));

¿Cómo podría interpretarse eso como una declaración de función? Quiero decir, x es una variable, ¿verdad? Bueno, al declarar una variable puede agregar paréntesis adicionales, por lo que el gadget x; y gadget (x); ambos declaran la misma variable x . Lo mismo se aplica a los argumentos de función, por lo que el código anterior parece una declaración de una función que toma un primer argumento llamado x del tipo gadget y devuelve un widget ...


Es función que obtiene dos funciones, que devuelve gadget y doodad y ninguno de ellos obtiene argumentos.

Ejemplo que compila bien.

#include <iostream> class widget{}; class gadget{}; class doodad{}; gadget a(){} doodad b() {}; widget w( gadget(), doodad() ){ } int main() { w(a,b); return 0; }

http://ideone.com/YjZK9Y