【问题标题】:Uint and uintptr in golanggolang中的uint和uintptr
【发布时间】:2021-11-09 21:50:58
【问题描述】:

我知道 uintptr 的大小遵循与 Go 不同的相同规则; 我猜 ain't 和 uintptr 是相同的,只是它们在用例中不同。那么为什么 uintptr 在 go 内置函数中不是 uint 的别名,例如 byte 是 uint8 的别名,而 rune 是 int32 的别名?

【问题讨论】:

  • 整数和指针大小不保证相等。

标签: go types uint


【解决方案1】:

来自 Go spec,以下是“未定型”整数数据类型的大小定义方式:

uint 32 位或 64 位

int 与 uint 大小相同

uintptr 一个无符号整数,足以存储指针值的未解释位

如您所见,这两种类型都有一个不同的尺寸定义。即使它们在大多数(?)平台上的大小巧合地相同,也没有语言级别的理由应该将这些类型混为一谈。

指针整数具有不同类型还有一个好处:由于 Go 具有严格的类型,如果不先转换它,就不能将 uintptr 用作任何其他 int 类型。这很重要,因为 uintptr 在 Go 中主要用于 unsafe 目的,因此当您可能滥用不安全的功能时,具有不同的类型会给出强烈的指示或错误(或者至少,它会让您三思而后行)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2016-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2019-12-02
    相关资源
    最近更新 更多