c++ bool foo = true和bool foo = 1有什么区别吗?

9rbhqvlz  于 2023-07-01  发布在  其他
关注(0)|答案(2)|浏览(119)

在C++中,将bool赋值给true和将它赋值给1(或任何非零整数)之间有什么区别吗?
我见过许多有竞争力的程序员使用1而不是true,即使代码是提前写好的,所以我想知道除了简单的打字更快之外,是否还有什么好处。

0sgqnhkj

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
}
ezykj2lf

ezykj2lf2#

来自C++ 17标准(7.3.15布尔转换)
1算术、无作用域枚举、指针或成员指针类型的纯右值可以转换为bool类型的纯右值。零值、空指针值或空成员指针值转换为false;任何其他值都被转换为真。
因此,问题中显示的两种初始化之间没有区别。
然而,为了代码的可读性,使用布尔文本true而不是算术非零常量要好得多。

相关问题