空参数检查C++

Null parameter check C++

本文关键字:C++ 检查 参数      更新时间:2023-10-16

我有一个函数可以求解 4 个运动学方程之一。参数是浮点数,并且有没有办法区分 NULL 参数和值为 0 的参数。我已经阅读了这个主题,似乎 NULL 和 0 是相同的。我想区分0和"虚无"形式的原因是,0值分配了一个值,而"虚无"表明我们不知道该值是什么。

float doSomething(float& foo, float& bar, float& goo, float& baz){
    if(foo == (insert_null_value_here)){
        return (foo_after_we_did_some_equation);
    }
}

正如我已经讨论过的那样,"null"值不能为 NULL 或 0。如果参数都是指向浮点数的指针,如果我检查"nullptrs",这会起作用吗?(不是我的主要问题)即使前一个问题是肯定的,我也可以对非指针/引用类型使用什么值?(重述主要问题)

没有"空参数"这样的东西。这些引用不能合规地"为空"。

(重要的是不要将其与空指针的想法混为一谈,由于遗留原因,空指针的值曾经为 - 为了"方便",宏NULL定义为 - 但现在nullptr

如果要使这些值成为可选值,请使用 boost::optional ,它将围绕数据成员形成一个包装器和一个指示成员是否已填充的布尔值:

float doSomething(boost::optional<float>& foo)
{
   if (foo) {
      return someEquation(foo.get());
   }
   return somethingElse();
}

现在,有效值为:

  • 3.5f
  • 42
  • 0
  • -5

并且根本不传递任何值:

  • boost::none

如果你想保留引用到非const,你可以做这样的事情:

boost::optional<float> myValue = 3;  // or 42, or 5.1, or boost::none
doSomething(myValue);

截至 C++14 日,boost::optional几乎std::optional,但现在是图书馆基础 TS 的一部分,我们希望它能完整地进入 C++17。

在这里加上我的 2 美分。

您也可以直接使用指针,并为不想为其发送值的参数发送 nullptr。这是,如果您不想为次要功能包含 Boost。

此外,您不能检查 nullptr 的引用。默认情况下,它们应该具有正确的地址。