三元运算符c ++中的return语句

时间:2010-10-12 19:17:55

标签: c++ return ternary

我使用三元运算符编写了绝对函数,如下所示

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;

我没有收到任何错误。 这两者有什么区别?

5 个答案:

答案 0 :(得分:41)

三元运算符的第二个和第三个参数是表达式,而不是语句。

 return a

是一个声明

答案 1 :(得分:33)

您的语法不正确。 它应该是

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

或您想要的方式:

return a >=0 ? a : -a;

答案 2 :(得分:23)

  

两者之间有什么区别?

一个是正确的语法,另一个不是。

答案 3 :(得分:8)

?:是一个运算符,它接受三个表达式并以某种方式计算它们以产生结果。 return a不是表达式(它是语句),因此您的第一个表单不起作用。这与你不能将return放在其他运算符的参数中一样:return a + return b也不起作用。

如果您希望单独分支中的退货,请改为使用if

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

答案 4 :(得分:7)

Return是一个声明,不能在预期值的地方使用。

您必须在三元运算符的三个组件中使用表达式(通常会产生一个值)。