空参数检查C ++

时间:2014-12-29 19:40:08

标签: c++ parameters null nullptr kinematics

我有一个函数可以解决4个运动方程之一。参数是浮点数,有没有办法区分NULL参数和值为0的参数。我已经读了主题,似乎NULL和0是相同的。我想区分0和#34;虚无和#34;是因为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"这是否有效?(不是我的主要问题)即使前一个问题是肯定的,我可以使用什么值作为非指针/引用类型?(主要问题的重新陈述)

2 个答案:

答案 0 :(得分:6)

没有"空参数"。那些引用不能顺从"为空"。

(重要的是不要把它与空指针的想法混为一谈,因为遗留原因,它曾经有值 - 定义了一个宏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

如果您想保留引用非{ - 1}},请执行以下操作:

const

boost::optional was nearly std::optional as of C++14, but is now part of the Library Fundamentals TS we hope will make it, in entirety, into C++17

答案 1 :(得分:5)

在这里加2美分。

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

此外,您无法检查nullptr的引用。默认情况下,它们应该具有适当的地址。