bool数据类型是否可以在c ++中移植?

aru*_*run 0 c++

可以bool在C++中使用数据类型并且仍然可以保证可移植性吗?

在其他帖子中部分讨论了这一点,但没有具体讨论可移植性.

我想知道我是否可以使用bool并确保它将在大多数系统(例如99%)中编译,如果不是所有系统的话.

YeP*_*IcK 8

bool是一种内置类型,因此它与C++语言本身一样可移植


Mat*_*lia 5

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把它作为一种基本类型,所以有一些证据表明有人认为它是(或者,将来)是内置的.

不过,尽管其确切的定义有点模糊的,如上面说的东西命名booltruefalse的确可以和标准库使用,因此,如果您打算使用Cfront的3.0编译代码,bool很可能将是你最不关心的问题.:-)

顺便说一句,这次古老的C++之旅也带来了一些悲伤:Cfront 3.0 附带了一个C++正则表达式库,我们不得不等待C++ 11再次回来(而且它们在相当长一段时间内仍然被破坏了级别在libstdc ++).

  • 不知道Cfront,但是在它周围查看它似乎可以从版本5.0(1996)和Visual C++ 5(1997)中的Borland C++中获得,所以这绝对是预先标准的,但不是很多.寻找这些信息是一个有趣的沉浸在古代网络(通常与过时的大学课程页面重合),他们建议使用解决方案,如果你坚持使用Borland C++ 4(或 - 上帝禁止它 - Turbo C++). (2认同)