C ++ bool数据类型的异常行为

时间:2019-07-05 08:30:36

标签: c++

这是一个好奇心问题。我正在使用布尔值来跟踪代码的某些部分。我有一个布尔值,例如track初始化为false。现在,当我在其他地方使用整数常量将其更改为true时:

track = 1;

已定义。我知道这是正确的1和错误0的工作方式。但是现在当我说

track = 500;

这仍然是定义的。合理,因为它是0以外的任何其他值,表示它是正确的。我现在的困惑是何时做

track = 2147483648

INT_MAX大1,则行为仍定义为true。即使我将其进一步推到2147483649454788。但是当我等于21474836494547845784578时会抛出错误

error: integer constant is too large for its type [-Werror]
                     _softExit = 21474836494547845784578;
                                 ^~~~~~~~~~~~~~~~~~~~~~~

现在这很令人困惑。我是C ++的新手,所以我不确定为什么或这意味着什么。我知道我可以只使用track = true;,但我很好奇。

1 个答案:

答案 0 :(得分:6)

发现自己后,int对象隐式转换为boollong long(或std::int64_t)也是如此。到目前为止,一切都很好,但是您显示的编译器消息与bool没有任何关系。就是这么说:在您的程序中,您有一个不适合内置整数类型可以处理的域的整数文字。因此,错误,您无需尝试初始化bool就可以得到它。

这没关系:

const bool test = std::numeric_limits<long long>::max();

插入std::numeric_limits<long long>::max()会产生+1的实际文字值时不正确。