【问题标题】:Where's the bool64 type?bool64 类型在哪里?
【发布时间】:2015-01-06 19:23:14
【问题描述】:

我目前正在移植一个在某些情况下使用 longbool 的小型应用程序,如果我能找到一个,我会使用 bool64 类型。将类型更改为 in64 并设置/检查 0 以查找是否为真/假并不是什么大问题,但如果有某种方法可以启用 bool64,我会使用它。

有人知道吗?

【问题讨论】:

  • 一个布尔值包含两个值(真和假)。 LONGBOOL 的存在只是为了与 WinAPI 中使用的数据类型兼容(它的存在只是为了与其他类型兼容)。没有,从来没有,而且很可能永远不会是 Bool64 类型。你有什么可能的用途?

标签: delphi delphi-xe7


【解决方案1】:

没有 64 位宽的布尔类型。布尔类型在documentation 中列出:

4 种预定义的布尔类型是 Boolean、ByteBool、WordBool 和 LongBool。布尔值是首选类型。其他的存在是为了提供与其他语言和操作系统库的兼容性。

一个布尔变量占用一个字节的内存,一个ByteBool变量也占用一个字节,一个WordBool变量占用2个字节(一个字),一个LongBool变量占用4个字节(2个字)。

因此,如果您需要用作布尔值的 64 位类型,则必须使用 64 位整数。您可能可以通过与Boolean 之间的隐式强制转换运算符的增强记录来使语法更适合。

我无法想象您为什么需要 64 位布尔值。我从来没有遇到过使用这种类型的库。我想知道你是不是想错了。

【讨论】:

  • 我正在移植客户的中型 32 位项目,他们使用 longbool(类型转换或直接)一堆,我会简单地添加类似“type longbool=bool64;”的东西如果有一个并且很快就完成了。由于该合同是关于将此应用程序移植到 64 位(不是优化或改进),以尽可能降低每分钟的成本(因此美元)很重要。
  • 你搞错了。除了指针,您不需要将 32 位类型更改为 64 位。整数在所有平台上都是 32 位宽。您不希望类型在 32 位和 64 位之间浮动,因为这会导致 32 位和 64 位版本之间的不兼容。 LongBool 用于互操作。到处都是 32 位。如果您使用 64 位类型,则互操作将不起作用。我写这一切都是基于我维护一个大型应用程序的经验,该应用程序从同一来源编译为 32 位和 64 位版本。
  • 对于一个典型的简单小应用程序,您只需添加 Win64 目标并且根本不做任何更改。如果您将指针转换为整数,您将转换为 NativeInt 而不是 Integer。或者重新写。没有演员表。但是作为一般规则,您不应该需要任何条件代码,并且您不应该需要像您在评论中显示的那样的类型别名。
  • 我同意并理解,但发生这种情况的应用程序在变量和函数结果的指针上具有 longbool 类型转换,所以我必须处理它。
  • 我想我会通过将指针与 nil 进行比较而不是转换为布尔类型来处理这个问题。如果你想要一个漂亮的端口,我肯定会修复代码以便它是干净的。
【解决方案2】:

FreePascal 有一个 64 位的 C 布尔类型,称之为“qwordbool”

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多