|
原文:STOP USING BOOL IN C++ FOR FUNCTION PARAMETERS !
<hr/>介绍
本文讨论了 bool 在 C++ 中的使用。我们该不该用它?这就是我们要回答的问题。虽然这更像是一个开放的讨论,而不是一个编码规则。
首先,bool 类型是什么?布尔变量是一个可以设置为 false 或 true 的变量。
假设你有一个简单的功能来决定是否要买房子,你可以这样设计
bool shouldBuyHouse(bool hasSwimmingPool, bool hasEconomicLight);
问题来了!
然后,你想用它的时候,可以这么用:
if(shouldBuyHouse(false, true)){}
这里用的没有问题,但是读者第一眼可能不明白这个 false 是指没有游泳池,还是说没有节能灯。
因此,你试着把函数调用改成了这样:
bool economicLight = true;
bool hasSwimmingPool = false;
if(shouldBuyHouse(economicLight, hasSwimmingPool)) {
}
现在你高兴了,读者确切地知道 bool 的意思了。你确定?眼尖的读者可能会注意到,这里的参数颠倒了。
怎么解决问题?
有不同的方法来解决这类问题。第一种方法是使用 strong_type。有许多库提供这类功能,但是,一个简单的 enum class就可以做到这一点。
读者不仅会知道哪个实参对应哪个形参,而且在形参颠倒的情况下,编译器也不会让错误通过。
让我们重写函数声明:
enum class HouseWithSwimmingPool {No, Yes};
enum class HouseWithLights {Economical, Incandescent};
bool shouldBuyHouse(HouseWithSwimmingPool, HouseWithLights);
if(shouldBuyHouse(HouseWithSwimmingPool::Yes, HouseWithLights::Economical)) {
}
结语
我建议大家不要在函数形参中使用 bool 类型。你怎么看?你是否在哪都使用 bool?
Thanks for reading~ |
|