C++;如果没有像C一样传递任何内容,则将函数参数设置为null# 我试图在C++中创建一个函数,它包含3个参数,但是第三个参数我不允许任何东西通过。
比如说 如何编写此C#函数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++中创建这个?有办法吗?可以使用默认参数。这里的问题是
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?
。你可能想改变这一点。