Подтвердить что ты не робот

Return в тройном операторе С++

Я написал абсолютную функцию, используя тернарный оператор следующим образом

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

Я получаю следующие сообщения об ошибках

../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

Если я напишу вот так

return a>=0 ? a : -a;

Я не получаю никаких ошибок. Какая разница между двумя?

4b9b3361

Ответ 1

Второй и третий аргументы тернарному оператору являются выражениями, а не операторами.

 return a

- утверждение

Ответ 2

Какая разница между двумя?

Один правильный синтаксис, другой - нет.

Ответ 3

Ваш синтаксис неверен. Это должно быть

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

или так, как вы этого хотели:

return a >=0 ? a : -a;

Ответ 4

?: - это оператор, который принимает три выражения и каким-то образом оценивает их результат. return a не является выражением (это утверждение), поэтому ваша первая форма не работает. Это так же, как вы не можете поместить return в аргументы других операторов: return a + return b также не будет работать.

Если вы хотите получить возврат в отдельных ветвях, используйте if вместо:

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

Ответ 5

Возврат - это оператор и не может использоваться там, где ожидается значение.

Вы должны использовать выражения (которые обычно дают значение) в трех компонентах тернарного оператора.