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

SAS*_*ROG 2 c++

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

track = 1;
Run Code Online (Sandbox Code Playgroud)

这是定义的。我了解这将如何工作1真假存在0。但是现在当我说

track = 500;
Run Code Online (Sandbox Code Playgroud)

这仍然是定义。合理,因为它是等于或大于其0真值的任何其他值。我现在的困惑是什么时候做

track = 2147483648
Run Code Online (Sandbox Code Playgroud)

大于1 INT_MAX的行为仍定义为true。即使当我将其推到更远的位置时2147483649454788。但是当我等于21474836494547845784578它抛出一个错误

error: integer constant is too large for its type [-Werror]
                     _softExit = 21474836494547845784578;
                                 ^~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

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

lub*_*bgr 6

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

这样就可以了:

const bool test = std::numeric_limits<long long>::max();
Run Code Online (Sandbox Code Playgroud)

而将实际文字值std::numeric_limits<long long>::max()收益+1也不行。