This question already has answers here:
C++ : integer constant is too large for its type
(2个答案)
去年关闭。
这是一个好奇心问题。我正在使用 bool(boolean) 值来跟踪代码的某些部分。我有一个 bool(boolean) 值,比如说
这是定义的。我了解这将如何工作,正确为
这仍然是定义的。合理,因为它是
比
现在,这只是令人困惑。我是C++的新手,所以我不确定为什么或这意味着什么。我知道我可以只使用
在插入
(2个答案)
去年关闭。
这是一个好奇心问题。我正在使用 bool(boolean) 值来跟踪代码的某些部分。我有一个 bool(boolean) 值,比如说
track
初始化为false
。现在,当我在其他地方使用整数常量将其更改为true时:track = 1;
这是定义的。我了解这将如何工作,正确为
1
和错误为0
。但是现在当我说track = 500;
这仍然是定义的。合理,因为它是
0
以外的任何其他值,表示它是正确的。我现在的困惑是什么时候做track = 2147483648
比
INT_MAX
大1,则行为仍定义为true。即使我将其进一步推到2147483649454788
。但是当我等于21474836494547845784578
时会抛出一个错误现在,这只是令人困惑。我是C++的新手,所以我不确定为什么或这意味着什么。我知道我可以只使用
track = true;
,但我很好奇。 最佳答案
如您所知,int
对象隐式转换为bool
。 long long
(或std::int64_t
)也是如此。到目前为止,一切都很好,但是您显示的编译器消息与bool
没有任何关系。就是这么说:在您的程序中,您有一个不适合内置整数类型可以处理的域的整数文字。因此,错误,您无需尝试初始化bool
就可以得到它。
这样就可以了:
const bool test = std::numeric_limits<long long>::max();
在插入
std::numeric_limits<long long>::max()
产生+1
的实际文字值时,这是不正确的。关于c++ - C++ bool数据类型的异常行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56899406/