为什么指针类型在C++中没有界

Why are pointer types not bounded in C++?

本文关键字:C++ 指针 类型 为什么      更新时间:2023-10-16

我认为指针的最大值是所用指针大小的最高可能值,但显然不是。

#include <iostream>
#include <limits>
int main() {
  std::cout << std::numeric_limits<char *>::is_bounded << std::endl;
  std::cout << (void *)std::numeric_limits<char *>::min() << std::endl;
  std::cout << (void *)std::numeric_limits<char *>::max() << std::endl;
}

我用 g++ 编译并得到以下输出:

0
0
0

标准说 min(( 和 max(( 是有意义的,如果is_bounded不是假的。它还说,如果类型可表示的值集是有限的,则is_bounded应该为真。

指针不是有限的还是为什么is_bounded在我的程序中是假的和 max(( 零?

指针

不是算术类型。

从 18.3.2.1 类模板numeric_limits

numeric_limits类模板为程序提供信息 关于实现表示的各种属性 算术类型。应为每个专业提供专业 算术类型,浮点型和整数型,包括布尔值。这 会员is_specialized应适用于所有此类专业 numeric_limits .对于在 numeric_limits模板中,专业化应在 这样,它们就可以用作常量表达式。 非算术标准类型,如complex<T>(26.4.2(,不得 有专长。

因此,应用非算术类型的测试会导致无意义的默认值。

<limits> 标头不会实现 std::numeric_limits<char *> 的特定重载。这意味着我们随后使用默认实现。

std::numeric_limits<T>::min()std::numeric_limits<T>::max()的默认实现是返回T(),这将解释为什么你会得到0

您可以在此处看到std::numeric_limits<T>::is_bounded()实现的类型列表。

指针

本身就是一种类型,它是一种存储另一个变量地址的类型。 std::numeric_limits对处理数字的类型进行操作。 指针不是数字,它们是存储内存位置地址的变量。 虽然地址本身可能用数字表示,但这并不能使指针编号。

minmax指针上毫无意义。

32 位指针可以存储最大 32 位大小的地址。 就这样。 64 位指针的最大大小为 64 位,这意味着它可以存储最大为 64 位的地址。这与数字最小值或最大值无关。