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

not able to understand return statement in isEmpty function of stack implementation

我的堆栈中有 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 的情况下执行其任务声明。

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

回答2:我没有确切的想法c++,但逻辑上

return top == -1;

可以分解成

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

    1.1 如果相等,return 1 [或TRUE](比较成功的结果)

    1.2如果不是,return0[或FALSE](比较失败的结果)

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

If a return statement with an expression is executed, the value of the expression is returned to the caller as the value of the function call expression.

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

. . . A return statement with an expression of non-void type can be used only in functions returning a value; the value of the expression is returned to the caller of the function....

是的,这两个功能完全一样。他们 return top 是否等于 -1

在第一个代码中,这写得有点"explicitly"(从reader的角度来看)。它的英文等价物是(大致):

Evaluate the expression top == -1. If the result is true, then return true, else return false.

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

Return the result of the expression top == -1.

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

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

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

return top == -1; 表示 "return the value of the expression top == -1"。正如我在上面显示的那样,这个值是 truefalse。这些与基于 if() 的代码中的值 return 完全一致,因此这两个代码是等价的。

在我的代码中,我倾向于在 "syntactically unusual" return 语句周围使用括号,我认为 == 是其中之一。所以我会在我的代码中写这个(我当然更喜欢它而不是 if 版本):

return (top == -1);