sola - Declaración de retorno en el operador ternario c++
return operador ternario (5)
Escribí la función absoluta usando el operador ternario como sigue
int abs(int a) {
a >=0 ? return a : return -a;
}
Recibo los siguientes mensajes 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 asi
return a>=0 ? a : -a;
No me sale ningún error. ¿Cuál es la diferencia entre los dos?
¿Cuál es la diferencia entre los dos?
Una es sintaxis correcta, la otra no.
El segundo y tercer argumento del operador ternario son expresiones, no declaraciones.
return a
es una declaración
La devolución es una declaración y no se puede utilizar donde se espera un valor.
Debe utilizar expresiones (que generalmente producen un valor) en los tres componentes del operador ternario.
Tu sintaxis es incorrecta. Debería ser
if (a >=0)
return a;
else
return -a;
o como lo querías
return a >=0 ? a : -a;
?:
es un operador que toma tres expresiones y las evalúa de alguna manera para producir un resultado. return a
no es una expresión (es una declaración ), por lo que su primer formulario no funciona. Es lo mismo que no puede poner return
en los argumentos de otros operadores: return a + return b
tampoco funcionará.
Si desea las devoluciones en las ramas separadas, use if
:
if (a >=0)
return a;
else
return -a;