无法理解堆栈实现的isEmpty函数中的return语句

时间:2015-01-12 09:01:18

标签: c++ c stack

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

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

我看到了几个 isEmpty()的在线代码,我无法理解。以下是摘录。

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

问题1:两个函数都执行完全相同的任务吗?

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

4 个答案:

答案 0 :(得分:2)

是的,两个功能完全相同。他们返回top等于-1

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

  

评估表达式top == -1。   如果结果为true,则返回true,否则返回false

第二个代码更巧妙地做了,其粗略的英语等价物将是:

  

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

答案 1 :(得分:2)

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

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

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

return (top == -1);

答案 2 :(得分:1)

是的,他们完全一样。

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

答案 3 :(得分:0)

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

回答2:我对c++一无所知,但逻辑上

return top == -1;

可以分解为

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

    1.1如果相等,则返回1 [或TRUE](由于比较成功)

    1.2如果不是,请返回0 [或FALSE](由于比较失败)

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

      

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

    c++11,第6.6.3节,第2段,

      

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