【问题标题】:not able to understand return statement in isEmpty function of stack implementation无法理解堆栈实现的 isEmpty 函数中的返回语句
【发布时间】:2015-03-10 00:05:57
【问题描述】:

我的堆栈中有 isEmpty() 函数。它看起来像下面这样。

bool Mystack<T>::isEmpty() const    //function 1
{
     if(top==-1)
          return true;
     else 
          return false;
}

我看到了一些 isEmpty() 的在线代码,我无法理解。下面是sn-p。

bool Mystack<T>::isEmpty() const    //function 2
{
    return top == -1;
}

问题 1:这两个函数是否执行完全相同的任务?

问题 2:如果是,那么有人可以解释一下函数 2 中的语法如何在不使用任何 if 语句的情况下执行其任务。

【问题讨论】:

  • 我可以理解这是一个基本问题。但是为什么要投反对票!!!!
  • 我强烈建议您阅读有关== 运算符的信息。然后分析指令if(B) return true; else return false;的可能执行路径,寻找bool类型的可能值B
  • 我通常将它与if 语句一起使用,因此永远不会感到困惑。但是在这里我找不到if
  • top == -1true 时,返回true。当它是false 时,它返回false。所以直接返回top == -1即可。
  • @tanz 编程在这方面有点像数学。只有两类问题:尚未解决的问题和明显的问题:-)

标签: c++ c stack


【解决方案1】:

答案 1:是的,同样的任务。

答案 2:我不知道 c++ 的确切概念,但合乎逻辑

return top == -1;

可以分解成

  1. 检查top的值是否等于1

    1.1 如果相等,返回1 [或TRUE](作为比较成功的结果)

    1.2 如果不是,则返回0 [或FALSE](作为比较失败的结果)

作为参考,来自C99 标准文档,第 6.8.6.4 章第 3 段,

如果执行带有表达式的return语句,则表达式的值为 作为函数调用表达式的值返回给调用者。

对于c++11,第 6.6.3 章第 2 段,

。 . .带有非 void 类型表达式的 return 语句只能用于返回值的函数;表达式的值被返回给函数的调用者......

【讨论】:

    【解决方案2】:

    是的,这两个功能的工作原理完全相同。他们返回top 是否等于-1

    在第一个代码中,这有点“明确”(从读者的角度来看)。它的英文等价物(大致)是:

    计算表达式top == -1。 如果结果是true,则返回true,否则返回false

    第二个代码做得更巧妙,其粗略的英文等效为:

    返回表达式top == -1的结果。

    【讨论】:

      【解决方案3】:

      是的,他们做的完全一样。

      考虑if 语句的语义。条件评估为bool,并根据true 进行检查。 top==-1 将评估为truefalse,如果评估为true,则执行第一个表单并返回true,否则评估第二个表单并返回false。这与第二个版本完全相同,只是更冗长。

      【讨论】:

      • 所以仅仅top==-1 给出的结果为真或假。我的印象是需要整个if(top==-1)。由于我一直在if 语句中使用== 运算符。
      【解决方案4】:

      top == -1 是一个表达式。假设不涉及运算符重载,则其返回类型为bool。如果top 等于-1,它将具有值true,如果不是这种情况,它将具有值false

      return top == -1; 表示“返回表达式top == -1 的值”。如上所示,该值是truefalse。这些与基于if() 的代码返回的值完全一致,因此这两个代码是等价的。

      在我的代码中,我倾向于在“语法异常”的返回语句周围使用括号,我认为== 就是其中之一。所以我会在我的代码中写这个(我当然更喜欢if 版本):

      return (top == -1);
      

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 2011-08-24
        • 2020-06-29
        • 1970-01-01
        • 2020-08-27
        • 2013-01-23
        • 2012-11-21
        • 2018-02-09
        • 2020-05-20
        相关资源
        最近更新 更多