ameen
ameen

Reputation: 851

return statement in ternary operator c++

I wrote the absolute function using ternary operator as follows

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

I get the following error messages

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

If I write like this

return a>=0 ? a : -a;

I don't get any error. What's the difference between the two?

Upvotes: 40

Views: 59294

Answers (5)

Nandit Tiku
Nandit Tiku

Reputation: 593

Your syntax is incorrect. It should be

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

or the way you wanted it:

return a >=0 ? a : -a;

Upvotes: 45

Gary Willoughby
Gary Willoughby

Reputation: 52608

What's the difference between the two?

One is correct syntax, the other is not.

Upvotes: 23

sth
sth

Reputation: 229874

?: is an operator that takes three expressions and evaluates them in some way to produce a result. return a is not an expression (it's a statement), so your first form doesn't work. It's the same as you can't put return in the arguments of other operators: return a + return b will also not work.

If you want the returns in the separate branches, use if instead:

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

Upvotes: 11

The Archetypal Paul
The Archetypal Paul

Reputation: 41779

The second and third arguments to the ternary operator are expressions, not statements.

 return a

is a statement

Upvotes: 56

Jonathan Leffler
Jonathan Leffler

Reputation: 755026

Return is a statement and cannot be used where a value is expected.

You must use expressions (which usually yield a value) in the three components of the ternary operator.

Upvotes: 9

Related Questions