C++ 为什么指针类型在C++;?

C++ 为什么指针类型在C++;?,c++,gcc,g++,C++,Gcc,G++,我认为指针的最大值是所用指针大小的最大可能值,但显然不是 #include <iostream> #include <limits> int main() { std::cout << std::numeric_limits<char *>::is_bounded << std::endl; std::cout << (void *)std::numeric_limits<char *>::min()

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

#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;
}
标准说,如果is_bounded不是false,那么min()和max()是有意义的。它还说,如果类型所表示的值集是有限的,那么is_bounded应该是真的


指针不是有限的,或者为什么在我的程序中有界为false且max()为零?

头没有为
std::numeric\u限制实现特定的重载。这意味着我们将使用默认实现

std::numeric\u limits::min()
std::numeric\u limits::max()
的默认实现是返回
T()
,这将解释为什么会得到
0


您可以看到
std::numeric\u limits::is\u bounded()
实现的类型列表。

指针本身就是一种类型,它存储另一个变量的地址<代码>标准::数字限制
对处理数字的类型进行操作。指针不是数字,而是将地址存储到内存位置的变量。虽然地址本身可能用数字表示,但这并不意味着指针是数字

min
max
对指针没有意义


32位指针可以存储最大32位的地址。仅此而已。64位指针的最大大小为64位,这意味着它最多可以存储64位大小的地址。这与数值最小值或最大值无关。

指针不是算术类型

从18.3.2.1类模板数字限制

numeric\u limits
类模板为程序提供信息 关于实现的表示形式的各种属性 算术类型。应为每个项目提供专业化 算术类型,包括浮点和整数,包括bool。这个 成员
是专业化的
应适用于
数值限制
。对于在
数值\u限制
模板,专业化应在 它们可用作常量表达式的一种方式。 非算术标准类型,如
复杂
(26.4.2),不得 有专长


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

指针是原始的内在数据格式。它们没有min()和max()值,因为它们可以指向程序堆和堆栈中的任何内容。
std::numeric_limits
指针没有意义。指针不是数字。询问指针的最大值是有意义的。如果我增加一个指针直到它不再增长,它应该是我得到的值。但我很高兴的回答是,标准中还提到了其他一些东西。你不允许“增加指针,直到它不再增长”。当您有一个指向数组的指针时,您所能做的最多就是将指针增加到数组最后一个元素之后的一个。更进一步的是未定义的行为。如何实现它不是imho的问题。
0
0
0