Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 空参数检查C++;_C++_Parameters_Null_Nullptr_Kinematics - Fatal编程技术网

C++ 空参数检查C++;

C++ 空参数检查C++;,c++,parameters,null,nullptr,kinematics,C++,Parameters,Null,Nullptr,Kinematics,我有一个函数,可以解4个运动学方程中的一个。这些参数是浮点数,有没有办法区分NULL参数和值为0的参数。我已经读过这个主题,NULL和0似乎是一样的。我之所以要将0与“虚无”区分开来,是因为0值指定了一个值,“虚无”表示我们不知道该值是什么 float doSomething(float& foo, float& bar, float& goo, float& baz){ if(foo == (insert_null_value_here)){

我有一个函数,可以解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。如果参数都是指向浮点数的指针,那么如果我检查了“null ptrs”(不是我的主要问题)这是否有效?即使前一个问题是“是”,我可以为非指针/引用类型使用什么值?(重新声明主要问题)

没有“null参数”这样的东西。这些引用不能符合“为空”

(重要的是不要将其与空指针的概念混为一谈,因为传统原因,空指针的值为零——宏
null
定义为零是为了“方便”——但现在是
nullptr

如果要使这些值成为可选值,请使用,它在数据成员周围形成一个包装,并使用一个布尔值指示是否填充该成员:

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

   return somethingElse();
}


那是。

在这里加上我的2美分

您还可以直接使用指针,并为不希望发送值的参数发送nullptr。这是为了防止您不想将Boost包含在次要功能中


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

请随时提问以进一步澄清。@πάνταῥεῖ 为什么这在这里是合理的?@πάνταῥεῖ: 请不要“仅仅提及”UB事物。@anoydάbiάmeάgrammers:如何“检查悬挂指针”?@πάνταῥεῖ 永远不允许有效引用引用空位置。优化编译器可以使用它来推断
if
语句不能执行,并将其完全删除。“boost::optional几乎是std::optional”。。。这似乎是非常常见的情况,请看
boost
似乎是
C++
beta版的游乐场。(注意这个评论与你的帖子无关,它只是让我侧吼)@网络:Boost绝对是C++标准图书馆的游乐场。如果foo=0,它不会被认为是错误的吗?仅当boost::none是实际参数时?可能只是通过值使
doSomething
获取
可选值?否则答案读起来有点令人困惑,即使最后有你的警告。@Barry:OP的代码引用了一个
float
,我想这其实是有原因的。引用没有地址。我不得不说Boost非常有用,但对于这样一个次要的功能,我希望能够简单地更改浮点值。@LightnessRacesinOrbit运算符的地址
&
对它们的作用相同。@Markransem:不,运算符的地址应用于引用对象<代码>[C++11:8.3.2/5]
规定:“不应有对引用的引用,不应有引用数组,也不应有指向引用的指针。”您不能获取引用的地址。这根本不可能。语言没有提供的概念。与指针不同的是,引用本身是别名,而不是“对象”(尽管这种抽象很不幸,但不可避免地会在一些地方泄漏,例如将引用存储为数据成员)。@MarkRansom:right-正如我在45分钟前的回答中所说,引用不能符合“为空”。你调用了UB,已经太晚了。我真的不明白你现在想说什么!
boost::optional<float> myValue = 3;  // or 42, or 5.1, or boost::none
doSomething(myValue);