【问题标题】:c++ ternary operator expected an expressionC/C++(29) [closed]c++ 三元运算符期望一个表达式/C++(29) [关闭]
【发布时间】:2021-04-24 15:12:04
【问题描述】:

double recursively(int n) {
    (n==0)?(return 0.0):((n==1)?(return 1.0):(return 2*recursively(n-1)+recursively(n-2)));
}

当我在递归函数中使用三元运算符时,它没有显示“预期表达式C/C++(29)”错误。我正在使用 Visual Studio 代码。有什么可能的原因吗?

【问题讨论】:

  • 请将代码添加为文本,而不是图像。
  • 控制流关键字,如@9​​87654323@ 不应在表达式中使用。应该写在前面。
  • "...当它不显示错误时,它没有显示“expected an expressionC/C++(29)”错误,那是什么问题?这是笔误吗?
  • return (n==0)?(0.0):(1.42);
  • return 0.0、return 1.0 等是语句,而不是表达式。正如错误消息所说,三元运算符需要表达式,即在a ? b : c 中,a、b, 和 c 必须都是有效的表达式。当表达式也使用三元运算符时也是如此。简单的方法是将return 关键字移到外面,并删除所有其他使用它的地方,即return (n == 0) ? (0.0) : ((n == 1) ? 1.0 :

标签: c++ operator-keyword ternary


【解决方案1】:

正式名称是“条件运算符”,它是一个产生值的表达式——a ? b : c 不是if (a) b; else c; 的简写,而是值b 和c 之间的选择。

重写以返回表达式的值:

return n==0 ? 0.0 : (n==1 ? 1.0 : 2*recursively(n-1)+recursively(n-2));

n == 1 ? ... 周围的括号在技术上是多余的,但更容易阅读。
我有时会像这样打破长行:

return n == 0 
       ? 0.0 
       : n == 1 
         ? 1.0 
         : 2 * recursively(n-1) + recursively(n-2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2021-10-06
    • 2020-03-30
    • 2020-12-21
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多