2010-10-12 35 views
27

me escribió la función absoluta utilizando operador ternario de la siguiente manerainstrucción de retorno en el operador ternario C++

int abs(int a) { 
a >=0 ? return a : return -a; 
} 

me sale el siguiente mensaje de error

../src/templates.cpp: In function ‘int abs(int)’: 
../src/templates.cpp:4: error: expected primary-expression before ‘return’ 
../src/templates.cpp:4: error: expected ‘:’ before ‘return’ 
../src/templates.cpp:4: error: expected primary-expression before ‘return’ 
../src/templates.cpp:4: error: expected ‘;’ before ‘return’ 
../src/templates.cpp:4: error: expected primary-expression before ‘:’ token 
../src/templates.cpp:4: error: expected ‘;’ before ‘:’ token 
../src/templates.cpp:5: warning: no return statement in function returning non-void 

Si escribo como esto

return a>=0 ? a : -a; 

No obtengo ningún error. ¿Cuál es la diferencia entre los dos?

Respuesta

37

El segundo y tercer argumentos para el operador ternario son expresiones, no declaraciones.

return a 

es una declaración

+0

El primer argumento del operador ternario es también una expresión, por supuesto. Sin embargo, los dos últimos podrían ser expresiones del tipo 'void'. –

+0

Sí, es solo que el problema del OP fue con los dos últimos ... –

5

retorno es una declaración y no se puede utilizar cuando se espera un valor.

Debe utilizar expresiones (que por lo general producen un valor) en los tres componentes del operador ternario.

6

?: es un operador que lleva tres expresiones y las evalúa de alguna manera para producir un resultado. return a no es una expresión (que es una declaración), por lo que su primera forma no funciona. Es lo mismo que no puede poner return en los argumentos de otros operadores: return a + return b tampoco funcionará.

Si desea que los rendimientos en las ramas separadas, utilice if lugar:

if (a >=0) 
    return a; 
else 
    return -a; 
22

Cuál es la diferencia entre los dos?

Uno es la sintaxis correcta, el otro no lo es.

+11

+1 para afirmar lo obvio: D – Vinzenz

23

Su sintaxis es incorrecta. Debe ser

if (a >=0) 
    return a; 
else 
    return -a; 

o la forma en que quería:

return a >=0 ? a : -a; 
Cuestiones relacionadas