C++;如果没有像C一样传递任何内容,则将函数参数设置为null# 我试图在C++中创建一个函数,它包含3个参数,但是第三个参数我不允许任何东西通过。

C++;如果没有像C一样传递任何内容,则将函数参数设置为null# 我试图在C++中创建一个函数,它包含3个参数,但是第三个参数我不允许任何东西通过。,c++,default-value,C++,Default Value,比如说 如何编写此C#函数 如何在C++中创建这个?有办法吗?可以使用默认参数。这里的问题是bool不能有null值。所以你有一些可能性。您可以为该参数指定一个有效的默认值bool: void GatherMovements(bool xPositions, bool yPositions, bool zPositions = false); 或者您可以有两个函数重载-一个接受3个参数,另一个接受2个参数: void GatherMovements(bool xPositions, bool

比如说 如何编写此C#函数


如何在C++中创建这个?有办法吗?

可以使用默认参数。这里的问题是
bool
不能有
null
值。所以你有一些可能性。您可以为该参数指定一个有效的默认值
bool

void GatherMovements(bool xPositions, bool yPositions, bool zPositions = false);
或者您可以有两个函数重载-一个接受3个参数,另一个接受2个参数:

void GatherMovements(bool xPositions, bool yPositions, bool zPositions);
void GatherMovements(bool xPositions, bool yPositions);
一个函数可以调用另一个函数,如果它们可以相互实现的话

第二种方法仅在使用
true
false
调用函数且没有最终参数是根本不同的操作时才有必要

如果您确实只需要一个函数,并且这三种情况应被视为不同,那么最后一个选项是使用
boost::optional

void GatherMovements(bool xPositions, bool yPositions, boost::optional<bool> zPositions);
void-GatherMovements(bool-xPositions、bool-yPositions、boost::可选zPositions);

但是,我建议最好使用重载方法(不要处理额外的不必要类型)。

可以使用默认参数。这里的问题是
bool
不能有
null
值。所以你有一些可能性。您可以为该参数指定一个有效的默认值
bool

void GatherMovements(bool xPositions, bool yPositions, bool zPositions = false);
或者您可以有两个函数重载-一个接受3个参数,另一个接受2个参数:

void GatherMovements(bool xPositions, bool yPositions, bool zPositions);
void GatherMovements(bool xPositions, bool yPositions);
一个函数可以调用另一个函数,如果它们可以相互实现的话

第二种方法仅在使用
true
false
调用函数且没有最终参数是根本不同的操作时才有必要

如果您确实只需要一个函数,并且这三种情况应被视为不同,那么最后一个选项是使用
boost::optional

void GatherMovements(bool xPositions, bool yPositions, boost::optional<bool> zPositions);
void-GatherMovements(bool-xPositions、bool-yPositions、boost::可选zPositions);

但是,我建议最好使用重载方法(不要处理额外的不必要类型)。

需要在声明中列出默认参数(而不是定义)。 因此,你的声明是:

public:
 void GatherMovements(bool xPos, bool yPos, bool zPos = false);
void MyClass::GatherMovements(bool xPos, bool yPos, bool zPos /* = false */) {}
你的定义是:

public:
 void GatherMovements(bool xPos, bool yPos, bool zPos = false);
void MyClass::GatherMovements(bool xPos, bool yPos, bool zPos /* = false */) {}
此外,默认参数需要在此处按值传递,即您不能有:

public:
     void GatherMovements(bool xPos, bool yPos, bool& zPos = false);

需要在声明中列出默认参数(而不是定义)。 因此,你的声明是:

public:
 void GatherMovements(bool xPos, bool yPos, bool zPos = false);
void MyClass::GatherMovements(bool xPos, bool yPos, bool zPos /* = false */) {}
你的定义是:

public:
 void GatherMovements(bool xPos, bool yPos, bool zPos = false);
void MyClass::GatherMovements(bool xPos, bool yPos, bool zPos /* = false */) {}
此外,默认参数需要在此处按值传递,即您不能有:

public:
     void GatherMovements(bool xPos, bool yPos, bool& zPos = false);

使用
boost
或C++1y建议的
std::optional
可以解决这个问题

void GatherMovements(bool xPos, bool yPos, boost::optional<bool> zPos = boost::nullopt);
现在您编写
gathermotions\u Internal
,如果未通过,则其中
zPos
nullptr
,否则指向已通过的
bool
。请注意,此指针的生存期不能保证超过函数调用(因此不要存储指针)


使用与上面的
optional
案例相同的逻辑(
if(zPos)
找出它是否存在,并
*zPos
找出它是否存在的值)。

使用
boost
或C++1y建议的
std::optional
可以解决这个问题

void GatherMovements(bool xPos, bool yPos, boost::optional<bool> zPos = boost::nullopt);
现在您编写
gathermotions\u Internal
,如果未通过,则其中
zPos
nullptr
,否则指向已通过的
bool
。请注意,此指针的生存期不能保证超过函数调用(因此不要存储指针)


使用与上面的
可选
案例相同的逻辑(
if(zPos)
找出它是否存在,并且
*zPos
找出它是否存在的值)。

如果已经使用boost/取决于它不会有问题,你可以用它作为默认值。

如果使用Boost已经/根据它不会是问题,你可以用它作为默认值。< /P> <代码>布尔O/COD>不能在C或C++中为空。您可以默认为true或false,但是…<代码>布尔O/COD>不能在C或C++中为空。您可以默认为true或false…我知道重载,只需要一个方法,do bool?存在于C++中:为D欢呼answer@Canvas您的示例没有
bool?
。你可能想改变这一点。我知道重载,只是想要一个方法,do bool?存在于C++中:为D欢呼answer@Canvas您的示例没有
bool?
。你可能想改变这一点。