为什么指针类型在C++中没有界
Why are pointer types not bounded in C++?
我认为指针的最大值是所用指针大小的最高可能值,但显然不是。
#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
对处理数字的类型进行操作。 指针不是数字,它们是存储内存位置地址的变量。 虽然地址本身可能用数字表示,但这并不能使指针编号。
min
和max
指针上毫无意义。
32 位指针可以存储最大 32 位大小的地址。 就这样。 64 位指针的最大大小为 64 位,这意味着它可以存储最大为 64 位的地址。这与数字最小值或最大值无关。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错