开发者

return statement in ternary operator c++

开发者 https://www.devze.com 2023-01-20 10:10 出处:网络
I wrote the absolute function using ternary operator as follows int abs(int a) { a >=0 ? return a : return -a;

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?


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

 return a

is a statement


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;


What's the difference between the two?

One is correct syntax, the other is not.


?: 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;


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消