返回指针时,如果找不到则返回什么?C++

y2k*_*y2k 2 c++ vector return-value default-value

我不确定要作为默认值返回什么?

myDrugs是一个私人vector<Drug*>容器

Drug* DrugDealer::getFirstDrugInSack(DrugType drugtobuy)
{
    for (int i = 0; i < myDrugs.size(); i++)
    {
        if (myDrugs[i]->getType() == drugtobuy)
            return myDrugs[i];
    }

    return 0; // is this right?
}
Run Code Online (Sandbox Code Playgroud)

所以我会称之为:

Drug *d = DrugDealer->getFirstDrugInSack(DrugType::Weed);
if (d != 0)
    // do something
else
    // onose?
Run Code Online (Sandbox Code Playgroud)

或者有更好的方法吗?

Leo*_*Hat 13

我会说这取决于函数是否期望找到值,这取决于您的函数是如何定义良好和有凝聚力的,以及它为客户端代码提供的契约类型.

如果找不到值是可以接受的,我会说在这种情况下返回NULL指针是一种向客户端代码指示无法找到该值的方法.

如果找不到值是特殊情况,这表明存在错误,可能下列方法之一可能更好:

  • 抛出异常.
  • 与返回NULL一起断言.通常不建议自己断言,因为这些(通常)是从发布版本中编译的.

在你的情况下,我会说返回NULL是可以接受的,但如上所述,这会改变每种情况,并且没有特定的"经验法则"适用于此处.


Ned*_*der 6

有些人喜欢NULL到0.你也可以引发异常.

  • NULL是一个C-ism,我很确定0是C++的首选形式. (3认同)
  • AFAIK NULL #defined为0(至少微软会这样做),所以没有问题.我实际上更喜欢NULL指针. (2认同)