无法理解堆栈实现的 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;
可以分解成
检查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
将计算为 true
或 false
,如果它计算为 true
则执行第一种形式并返回 true
,否则第二种形式是评估并返回 false
。这与第二个版本完全相同,只是更冗长。
top == -1
是一个表达式。假设不涉及运算符重载,其 return 类型为 bool
。如果 top
等于 -1
,它将具有值 true
,如果不是这种情况,它将具有值 false
。
return top == -1;
表示 "return the value of the expression top == -1
"。正如我在上面显示的那样,这个值是 true
或 false
。这些与基于 if()
的代码中的值 return 完全一致,因此这两个代码是等价的。
在我的代码中,我倾向于在 "syntactically unusual" return 语句周围使用括号,我认为 ==
是其中之一。所以我会在我的代码中写这个(我当然更喜欢它而不是 if
版本):
return (top == -1);
我的堆栈中有 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;
可以分解成
检查
top
的值是否等于1
。1.1 如果相等,return
1
[或TRUE
](比较成功的结果)1.2如果不是,return
0
[或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 istrue
, then returntrue
, else returnfalse
.
第二个代码做的更巧妙,其粗略的英文等效为:
Return the result of the expression
top == -1
.
是的,他们做的完全一样。
考虑 if
语句的语义。条件计算为 bool
并根据 true
检查。 top==-1
将计算为 true
或 false
,如果它计算为 true
则执行第一种形式并返回 true
,否则第二种形式是评估并返回 false
。这与第二个版本完全相同,只是更冗长。
top == -1
是一个表达式。假设不涉及运算符重载,其 return 类型为 bool
。如果 top
等于 -1
,它将具有值 true
,如果不是这种情况,它将具有值 false
。
return top == -1;
表示 "return the value of the expression top == -1
"。正如我在上面显示的那样,这个值是 true
或 false
。这些与基于 if()
的代码中的值 return 完全一致,因此这两个代码是等价的。
在我的代码中,我倾向于在 "syntactically unusual" return 语句周围使用括号,我认为 ==
是其中之一。所以我会在我的代码中写这个(我当然更喜欢它而不是 if
版本):
return (top == -1);