Jef*_*sah 0 c++ parameters null kinematics nullptr
我有一个函数可以解决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);
}
}
Run Code Online (Sandbox Code Playgroud)
正如我已经讨论过的,"null"值不能为NULL或0.如果参数都是指向浮点数的指针,那么如果我检查"nullptrs",这会工作吗?(不是我的主要问题)即使前一个问题是肯定的,我可以将什么值用于非指针/引用类型?(重新主要问题陈述)
没有"空参数"这样的东西.那些引用不能完全"为空".
(重要的是不要把它与空指针的想法混为一谈,因为传统原因以前的值为零 - 为了"方便"而将宏NULL定义为零 - 但现在是nullptr.)
如果要使这些值可选,请使用boost::optional,它形成数据成员的包装,以及指示是否填充成员的布尔值:
float doSomething(boost::optional<float>& foo)
{
if (foo) {
return someEquation(foo.get());
}
return somethingElse();
}
Run Code Online (Sandbox Code Playgroud)
现在,有效值为:
3.5f420-5而且根本没有传递任何价值:
boost::none如果你想保持ref-to-non const,你会做类似的事情:
boost::optional<float> myValue = 3; // or 42, or 5.1, or boost::none
doSomething(myValue);
Run Code Online (Sandbox Code Playgroud)
boost::optional几乎std::optional与C++ 14一样,但它现在是Library Fundamentals TS的一部分,我们希望它能够完全融入C++ 17.
在这里加2美分.
您也可以直接使用指针,并为您不想为其发送值的参数发送nullptr.这是,如果您不想将Boost包含在次要功能中.
您也无法检查nullptr的引用.默认情况下,它们应该具有适当的地址.
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |