具有C BOOL数据类型的奇怪行为

strange behaviour with C++ bool data-type

本文关键字:BOOL 数据类型 具有      更新时间:2023-10-16

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

track = 1;

这是定义的。我了解这将是正确的,因为1,false是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;,但我很好奇。

正如您发现的那样,int对象隐含转换为boollong long(或std::int64_t(也是如此。到目前为止,还不错,但是您显示的编译器消息与bool无关。只是它所说的:在您的程序中,您有一个整数字面意思,该字面不适合内置整数类型可以处理的域。因此,错误,您会在不尝试初始化bool的情况下得到它。

所以可以:

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

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