为什么Visual C++ 2008在我(不小心)使用布尔类型时没有抱怨
Why does Visual C++ 2008 not complain when I (accidentally) use type boolean
我一直在做一些Java工作,所以错误地在cpp文件中创建了一个这样的函数:
inline boolean is_whatever() const { return type_ == whatever; }
它编译得很好。
然后,当我在 UNIX 上编译相同的代码时,它失败了:
error: `boolean' does not name a type
VS为什么不抱怨?
有没有我可以设置的标志来防止这种松懈?
碰
巧boolean
已经在您包含的其他标头中定义(直接或间接)。例如,如果您包含windows.h
那么它会拉入许多其他标头,其中一些标头具有以下内容:
typedef unsigned char boolean;
如果这些标头中的任何一个包含在 cpp 文件中,则boolean
将成为命名空间的一部分。 如果在Windows API中"修复"这个问题,那么成千上万的遗留项目将不再编译,开发人员将武装起来。 它的使用可能可以追溯到bool
之前, C++ 中是一个具体的类型(还要记住,Windows API 是 C,而不是 C++)
使用布尔值
而不是布尔值,您将避免此类不便。
boolean
不是C++类型。也许某处有typedef bool boolean
,但它不是内置类型。
请改用bool
。
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 创建类似于布尔值的变量类型
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- 如何创建两个具有相同名称和不同返回类型并基于布尔参数运行的函数
- 函数的返回值类型是别名 ***或 *** 布尔值
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 如何将值初始化为返回类型为布尔值的函数?
- 无法将'Class::operator=='从"布尔"类型(类::)(类*)转换为"布尔"类型
- 如何通过 mpi c++ 发送布尔数据类型?
- 整数在 C++ 中没有被类型转换为布尔值
- lambda 转换为布尔值,而不是推导函数指针类型
- 为什么C++ std::min_element 库函数接受采用布尔返回类型的函数对象的函子,而不是像 C 中那样的 in
- 返回类型布尔函数中的声明语法错误
- C++ 动态评估变量类型布尔值
- C++ 包含针对多种类型数据的布尔测试的模板会获得匹配错误
- 给定仅包含布尔类型成员的结构的两个对象 s1 和 s2,只要 s1 的成员为 true,请检查 s2 的每个成员是否为真
- 为什么当我将真或假分配给布尔类型的向量时,下面的程序给我错误?
- 函数概念返回类型(必须是布尔)
- 使用布尔值数组"表达式必须具有指向对象类型的指针"错误C++
- 为什么Visual C++ 2008在我(不小心)使用布尔类型时没有抱怨