36

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

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;

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

4

5 回答 5

50

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

 return a

是一个声明

于 2010-10-12T19:20:16.213 回答
41

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

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

或您想要的方式:

return a >=0 ? a : -a;
于 2010-10-12T20:35:19.840 回答
24

两者有什么区别?

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

于 2010-10-12T20:22:33.287 回答
11

?:是一个运算符,它接受三个表达式并以某种方式评估它们以产生结果。return a不是一个表达式(它是一个语句),所以你的第一个表单不起作用。就像你不能放入return其他运算符的参数一样:return a + return b也不起作用。

如果您希望在单独的分支中返回,请if改用:

if (a >=0)
   return a;
else
   return -a;
于 2010-10-12T19:23:31.223 回答
9

Return 是一个语句,不能用于需要值的地方。

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

于 2010-10-12T19:20:00.087 回答