我有一个函数可以解决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"这是否有效?(不是我的主要问题)即使前一个问题是肯定的,我可以使用什么值作为非指针/引用类型?(主要问题的重新陈述)
答案 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的引用。默认情况下,它们应该具有适当的地址。