如果验证容器的大小并在同一条件语句下访问元素,这是很好的做法吗?

Is it good practice if container's size is validated and accessing an element under same conditional statement?

本文关键字:元素 访问 很好 条件 验证 如果 一条 语句      更新时间:2023-10-16

以下哪一个代码在它们两个之间更可取,为什么?

1.

std::stack<int>stk;
//Do something
if( stk.empty() == true || stk.top() < 10 )
{
//Do something.
}

阿拉伯数字

std::stack<int>stk;
//Do something
if( stk.empty() == true )
{
//Do something.
}
else if( stk.top() < 10 )
{
//Do something.
}

内置运算符&&||执行短路计算(如果在计算第一个操作数后知道结果,则不要计算第二个操作数(。因此,表达stk.empty() || stk.top() < 10是安全和良好的做法,stk.top()仅在stk.empty()评估结果为false时才调用。换句话说,运营商旨在实现这种使用。

这完全取决于用例。在第一个代码中,您有一个OR条件用于空堆栈并检查元素的值(如果元素存在(。因此,很明显,您可以继续执行代码。

在第二个代码中,您希望对这两个条件执行不同的操作。因此,您已将条件置于 if else 循环中。

当您不希望代码中断或通过角落测试用例时,良好的做法就会变得有意义。当堆栈为空时,您可能不会在代码中缺少某些内容。

std::stack<int>stk;
if(stk.top() < 10 )
{
//Do something.
}
else if(stk.empty() == true)
{
//Do something
}

这将生成运行时错误,因为堆栈为空,但您在检查堆栈空条件之前正在访问顶部元素。 错误快照

我希望答案能说清楚。