我的堆栈中有 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 语句。
答案 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
的值”。如上所示,此值为true
或false
。这些与基于if()
的代码返回的值完全一致,因此这两个代码是等效的。
在我的代码中,我倾向于在“语法不寻常”的返回语句周围使用括号,我认为其中一个是==
。所以我会在我的代码中写这个(我当然更喜欢它到if
版本):
return (top == -1);
答案 2 :(得分:1)
是的,他们完全一样。
考虑if
语句的语义。条件评估为bool
,并针对true
进行检查。 top==-1
评估为true
或false
,如果评估为true
,则执行第一个表单并返回true
,否则第二个表单为已评估并返回false
。这与第二个版本完全相同,只是更详细。
答案 3 :(得分:0)
回答1:是的,同样的任务。
回答2:我对c++
一无所知,但逻辑上
return top == -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语句只能用于返回值的函数;表达式的值返回给函数的调用者....