La regla para la lectura de las declaraciones peludas es comenzar con el identificador más a la izquierda y su forma de trabajo, recordando que ()
y []
se unen antes de *
(es decir, *a[]
es una matriz de punteros, (*a)[]
es un puntero a una matriz, *f()
es una función que devuelve un puntero, y (*f)()
es un puntero a una función):
GetPtr1 -- GetPtr1
GetPtr1( ) -- is a function
GetPtr1( opCode) -- taking a single parameter named opCode
GetPtr1(const char opCode) -- of type const char
*GetPtr1(const char opCode) -- and returning a pointer
(*GetPtr1(const char opCode)) ( ) -- to a function
(*GetPtr1(const char opCode)) (float, float) -- taking two parameters of type float
float (*GetPtr1(const char opCode)) (float, float) -- and returning float
lo tanto, si opCode
es igual a '+', GetPtr1
voluntad r Deje un puntero a la función Plus
, y si es '-', devolverá un puntero a la función Minus
.
C y la sintaxis de la declaración de C++ está centrada en la expresión (como Bjarne quisiera pretender de otra manera); la forma de la declaración debe coincidir con la forma de la expresión tal como se usaría en el código.
Si tenemos una función f
que devuelve un puntero a int
y queremos acceder al valor que se apunta a, que ejecutará la función y eliminar la referencia al resultado:
x = *f();
El tipo de la expresión*f()
es int
, por lo que la declaración/definición de la función es
int *f() { ... }
Ahora supongamos que tenemos una función f1
que devuelve un puntero a la función f
definida anteriormente, y queremos acceder a ese valor entero llamando al f1
. Tenemos que llamar f1
, derefence el resultado (que es la función f
), y ejecutarlo, y luego eliminar la referencia que resultado (ya f
devuelve un puntero):
x = *(*f1())(); // *f1() == f, so (*f1())() == f() and *(*f1())() == *f()
El tipo de la expresión*(*f1())()
es int
, por lo que el decaration/definición para f1
necesidades para ser
int *(*f1())() { return f; }
puede ser mejor para comprobar 'else if (código de operación == '-')' para evitar que se queme un poco de aceite de la medianoche en el futu re – Chubsdad
El tema no dice mucho sobre su pregunta ... Debería. – mih