C 中所有指针的大小都相同吗?
这个问题一直是争论的主题,一些消息来源声称所有指针具有相同的大小,而其他人则认为指针的大小可以不同。
根据 C 标准,明确保证:
- void 具有相同的大小char
- cv 限定指针(例如,T const、T volatile、T const volatile)与 T
指向具有相同基础类型的枚举类型的指针具有相同的大小-
虽然标准没有明确声明所有指针具有相同的大小,但在实践中通常确实是指向所有类类型的指针、函数指针、数据成员指针和函数成员指针具有相同的大小。
但是,这个假设并不能 100% 保证,因为技术上允许编译器玩把戏。例如,他们可以为以特定前缀开头的类创建更长的指针,或者如果他们决定为这些类实现垃圾收集。
在实际场景中,编译器不太可能利用这种自由。因此,开发人员通常可以假设指向不同类类型和上述其他类型的指针将具有相同的大小。为了提供进一步的保证,可以实现 static_assert 语句来标记潜在的违规行为。
但是,在具有近指针和远指针的分段架构中,这些类型的指针可能具有不同的大小。这是具有统一大小的指针的通常规则的例外。
以上是C 中指针的大小总是相同吗?的详细内容。更多信息请关注PHP中文网其他相关文章!