为什么 `true` 和 `false` 都被认为是变量?

Why are `true` and `false` both considered variables?

我是 C++ 的新手(对整体编程来说也是新手),当我读到我的 C++ 大学书籍("Starting out with C++ Early Objects" Gaddis、Walters 和 Muganda 的第 9 版)时,我看到了关于 bool 的注释数据类型。

"NOTE: Notice that true and false do not have quotation marks around them. This is because they are variables, not strings."

现在,据我了解,变量是可以更改的。我知道 bool 数据类型的变量将是一个变量,但为什么 truefalse 被认为是变量?

根据我的理解,false 存储为整数值 0true 存储为整数值 1。我尝试将值 x 分配给 bool,其中 x0<x<0 并且它们都输出 1 这让我得出结论 true 也是其他一切比 0(换句话说,true 与 !false 相同?)。

如果这是真的,为什么 'false' 被认为是变量而不是常量?

您使用的图书表明作者明显缺乏对主题的理解。那本书在骗你。把它扔进垃圾桶。

truefalse 是布尔文字:它们是写下 bool 类型值的一种直接方式。 "true""false" 是字符串文字——不幸的是,C++ 可以通过将它们转换为它们的地址,然后再转换为布尔值来帮助您搬起石头砸自己的脚。所以你得到了这个美妙的金块:

bool b1 = "false"; // string contents don’t matter
assert(b1 == true);
using book = bool;
book b2 = false;
assert(b2 == false);

断言是在代码中编写真语句的一种方式:它们意味着,在它们出现的地方,括号中的条件必须为真。

truefalse 以编译器需要的任何方式存储——这是一个实现细节,标准在这里没有要求,除了 true 必须转换为 1 在数字上下文中,并且 false 必须在那里转换为 0。通常它们不是存储为整数,而是字节(char),即

assert(sizeof(int) > sizeof(bool));