为啥三元运算符在我的代码中不起作用?
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 1
和 return 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控制台中工作