可以bool在C++中使用数据类型并且仍然可以保证可移植性吗?
在其他帖子中部分讨论了这一点,但没有具体讨论可移植性.
我想知道我是否可以使用bool并确保它将在大多数系统(例如99%)中编译,如果不是所有系统的话.
bool是自第一个C++标准(C++ 98)以来的内置类型,所以如果你有一个符合任何 C++标准的编译器(可以说是过去20年中的任何编译器),你应该设置它.
至于预标准的C++,环顾它似乎在PC编译器上,它出现在1996-1997(Visual C++ 5,Borland C++ 5); 事实上,GotW#26提到bool"自[Stroutroup's]注释C++参考手册"(1990)以来,它是"唯一被添加到C++中的内置数据类型",所以推断出它诞生于1990年到1996年之间是合理的.阅读网络1993年经常作为boolC++的"出生日期"被抛出,但我找不到一个可靠的参考资料.
虽然您仍然可以找到过时的页面(主要来自大学课程)解释如何解决bool旧编译器的缺失,但现在使用它没有兼容性问题,除非您被迫使用非常古老的工具链(我在看着你,大学课程,2018年推荐Turbo C++).
也许你对C感到困惑,bool只出现在C99?
是否
bool有预标准C++(如Cfront)?
看看Cfront 3.0.3(1994年,尽管最初的3.0是在1991年发布)的来源,bool确实被抛出了很多,特别是在标准的标题中,例如basic_string.h.
至于它的定义,有一个疯狂的组合typedef char bool;(但里面的#ifdef CFRONT_COMPATIBLE_LUCENT,所以也许它只是一个兼容性的定义是什么?而跆拳道,版权日期是1996年?) #define bool char,enum bool { false, true };以及一个typedef int bool;在形势大好命名std_bool.h头(但也有1996年的版权日期!).
看看词法分析器和解析器我找不到bool,尽管demangler把它作为一种基本类型,所以有一些证据表明有人认为它是(或者,将来)是内置的.
不过,尽管其确切的定义有点模糊的,如上面说的东西命名bool与true和false值是的确可以和标准库使用,因此,如果您打算使用Cfront的3.0编译代码,bool很可能将是你最不关心的问题.:-)
顺便说一句,这次古老的C++之旅也带来了一些悲伤:Cfront 3.0 附带了一个C++正则表达式库,我们不得不等待C++ 11再次回来(而且它们在相当长一段时间内仍然被破坏了级别在libstdc ++).
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |