为啥三元运算符在我的代码中不起作用?

Posted

技术标签:

【中文标题】为啥三元运算符在我的代码中不起作用?【英文标题】:Why is the ternary operator not working in my code?为什么三元运算符在我的代码中不起作用? 【发布时间】:2017-05-03 00:48:35 【问题描述】:

我有以下代码

mystack.empty() ? return 1 : return 0;

从语法的角度来看,它看起来很完美,但是每当我尝试运行它时,它都会抛出一个错误,说

[错误] 在 'return' 之前需要 ':'

[错误] 'return' 之前的预期主表达式

三元运算符不能与 return 语句一起使用还是代码有问题?而且我猜代码是不言自明的。

谢谢。

【问题讨论】:

从语法的角度来看很完美 - 不,不是 这是什么语言? return 通常是一个语句,而三元运算符需要两个表达式,例如return (mystack.empty() ? 1 : 0);. @EdHeal 这里有什么问题? @Lee 我是用 C++ 写的 三元运算符并不是编写 if 的另一种方式——它不像您想的那样接受语句。 @Lee 有一个使用示例。 【参考方案1】:

语法无效。 Ternary conditional operator 要求其操作数是 expressions,但 return 1return 0 不是。

另一方面,return statement 可以与(可选)表达式一起使用,例如三元条件运算符:

attr(可选) 返回表达式(可选) ; (1)

所以你可以/应该把它写成

return mystack.empty() ? 1 : 0;

【讨论】:

技术上return 1 也不是一个声明(return 1; 是) @M.M 那么它只是一个无效的表示吗?既不是语句也不是表达式。 是的,它不符合条件运算符的语法,因为它不是一个表达式(为此,它是什么并不重要,如果有的话) 或者你可以简单地使用return mystack.empty(); @PeteBecker 是的,我可以使用它。谢谢【参考方案2】:

return 是一个语句,规则是不能将语句调用到表达式中。

尝试重新格式化代码并使用以下代码(假设该函数返回一个布尔值)

return  mystack.empty()? 1:0;

【讨论】:

以上是关于为啥三元运算符在我的代码中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

如果在三元运算符中使用局部变量,为啥从 int 到 short 的缩小转换不起作用

json对象上的多属性检查三元运算符在nodejs中不起作用,而它在google chrome控制台中工作

三元运算符中不需要的 NullPointerException - 为啥? [复制]

使用三元运算符的条件渲染和 onClick 事件

在选择选项标签内使用三元运算符

为啥 Go 没有三元条件运算符 [关闭]