我使用三元运算符编写了绝对函数,如下所示
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;
我没有收到任何错误。 这两者有什么区别?
答案 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是一个声明,不能在预期值的地方使用。
您必须在三元运算符的三个组件中使用表达式(通常会产生一个值)。