传递"No/Null/0"作为参考?

Passing "No/Null/0" as a reference?

本文关键字:参考 Null No 传递      更新时间:2023-10-16
嘿,我有

个小问题,我有这个功能

编辑:这不是我的函数,它是库的一部分。

void Input_GetMousePos(
  float *x,
  float *y
);

而且我只想存储 Y 值,那么我怎么会说 X 在哪里"NULL"或"我不想写任何东西"呢?

我发现的解决方法是声明一个变量,但永远不要再次使用它,就像这样

float vx, vy;
_hge->Input_GetMousePos(&vx, &vy);

然后我再也不会使用"vx"了。

所以我的问题是,有没有办法传递"NULL"或类似的东西?

也欢迎提出标题更改建议。

NULL

nullptr)的要点是你可以通过它们来代替指针,所以要回答你的问题("我怎么说'NULL'"),你只需说NULL

_hge->Input_GetMousePos(NULL, &vy);

使用 C++11,建议您使用 nullptr 而不是 NULL ,因为它在某些边缘情况下使用模板表现得更好。否则,两者都是一样的,所以如果你对NULL更舒服,你也可以使用它。

_hge->Input_GetMousePos(nullptr, &vy);

如果您尝试过并且它崩溃或行为不端,那么您就不走运了,并且接收 X 组件的虚拟变量与您得到的一样好。在这种情况下,传递nullptr是惯例,因此,如果不尊重它,则无法使用此特定函数执行任何操作。但是,可能还有其他功能可以让您访问单个组件,但我们没有足够的信息来帮助解决这个问题。

好吧,首先,您不将参数作为引用传递,而是作为指针传递。像你一样使用指针,你可以只传递 NULL:

void Input_GetMousePos(float *x, float *y) {
  if (x != NULL){
     //you can safely dereference x
  }
  if (y != NULL){
     //you can safely dereference x
  }
}
float vy;
_hge->Input_GetMousePos(NULL, &vy);

您在问题中提到了参考文献。所以让我们也澄清一下。

通过引用传递如下所示:

void Input_GetMousePos(float &x, float &y) {
}
float vx, vy;
_hge->Input_GetMousePos(vx, vy);

在这里,参数xy是引用。您不能使用NULL或类似的东西作为参考。但是,您可以使用可选的包装器,例如 boost::optional

编辑

编辑了我的问题,我忘了包括有问题的函数是库的一部分,而不是我自己写

在这种情况下,请查看函数的文档。如果它说参数是可选的,那么你可以传递 NULL,否则函数在这些地址写入并且你不能传递NULL .您需要提供有效的地址,因此必须使用变量。