在C++中,将bool赋值给true和将它赋值给1(或任何非零整数)之间有什么区别吗?我见过许多有竞争力的程序员使用1而不是true,即使代码是提前写好的,所以我想知道除了简单的打字更快之外,是否还有什么好处。
bool
true
1
0sgqnhkj1#
...并将其赋值为1(或任何非零整数)?在这个简单的例子中,效果是一样的。
// all true: bool foo = true; bool bar = 1; bool baz = 123;
有什么区别吗?我想到的一个是可读性/意图。将1分配给变量表明程序员希望它是一个携带数值的变量。仔细检查代码后,我会注意到它被分配给了bool(在继续阅读代码之前,我会立即将其更改为true)。在 * 不 * 那么简单的情况下,你会得到一个惊喜:
#include <iostream> void foo(bool) { std::cout << "bool\n"; } void foo(int) { std::cout << "int\n"; } // oups someone added an overload int main() { foo(1); // I use 1 instead of true because it's so much shorter }
ezykj2lf2#
来自C++ 17标准(7.3.15布尔转换)1算术、无作用域枚举、指针或成员指针类型的纯右值可以转换为bool类型的纯右值。零值、空指针值或空成员指针值转换为false;任何其他值都被转换为真。因此,问题中显示的两种初始化之间没有区别。然而,为了代码的可读性,使用布尔文本true而不是算术非零常量要好得多。
2条答案
按热度按时间0sgqnhkj1#
...并将其赋值为1(或任何非零整数)?
在这个简单的例子中,效果是一样的。
有什么区别吗?
我想到的一个是可读性/意图。将
1
分配给变量表明程序员希望它是一个携带数值的变量。仔细检查代码后,我会注意到它被分配给了bool
(在继续阅读代码之前,我会立即将其更改为true
)。在 * 不 * 那么简单的情况下,你会得到一个惊喜:
ezykj2lf2#
来自C++ 17标准(7.3.15布尔转换)
1算术、无作用域枚举、指针或成员指针类型的纯右值可以转换为bool类型的纯右值。零值、空指针值或空成员指针值转换为false;任何其他值都被转换为真。
因此,问题中显示的两种初始化之间没有区别。
然而,为了代码的可读性,使用布尔文本
true
而不是算术非零常量要好得多。