具有C BOOL数据类型的奇怪行为
strange behaviour with C++ bool data-type
这是一个好奇的问题。我正在与布尔值合作,以跟踪我的代码的某些部分。我有布尔人,例如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
对象隐含转换为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++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何获取C++字符数据类型的地址
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 构造智能点数据类型以及普通数据类型的通用方法
- 如何使映射键具有两种不同的数据类型?
- 具有C BOOL数据类型的奇怪行为
- 比较C 中BOOL数据类型的比较
- Swig 3.0.1, python 3和bool数据类型
- 为什么返回Windows BOOL数据类型而不返回int