空参数检查C++
Null parameter check C++
我有一个函数可以求解 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 的引用。默认情况下,它们应该具有正确的地址。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++LDAP检查用户是否是特定组的成员
- 检查TCHAR数组输入是否为带符号整数C++
- 用概念检查属性的类型