una ternario sola operador linea condicional c++ return ternary

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;