Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 确定C+中指针限制的惯用方法是什么+;?_C++_Pointers_Limits - Fatal编程技术网

C++ 确定C+中指针限制的惯用方法是什么+;?

C++ 确定C+中指针限制的惯用方法是什么+;?,c++,pointers,limits,C++,Pointers,Limits,我想在编译时知道指针类型的值的范围限制。h仅指定纯数字类型的最大值和最小值。我不希望使用硬编码常量,我也不希望使用sizeof(foo*)计算max,我相信我会使用intptr\t。它被定义为可以保存指针值的整数,因此intptr\u t的最小/最大值应该可以工作 它可能大于实际指针的值。但是从您对只需要最小/最大值的类的解释来看,我不认为您需要完全的准确性。我相信我会使用intptr\t。它被定义为可以保存指针值的整数,因此intptr\u t的最小/最大值应该可以工作 它可能大于实际指针的值

我想在编译时知道指针类型的值的范围<代码>限制。h仅指定纯数字类型的最大值和最小值。我不希望使用硬编码常量,我也不希望使用
sizeof(foo*)
计算max,我相信我会使用intptr\t。它被定义为可以保存指针值的整数,因此intptr\u t的最小/最大值应该可以工作


它可能大于实际指针的值。但是从您对只需要最小/最大值的类的解释来看,我不认为您需要完全的准确性。

我相信我会使用intptr\t。它被定义为可以保存指针值的整数,因此intptr\u t的最小/最大值应该可以工作


它可能大于实际指针的值。但是从您对只需要最小/最大值的类的解释来看,我不认为您需要完全的准确性。

指针不是数字。特别是,它们不是绝对有序的-给定两个随机指针
p
q
,您无法从另一个指针中减去一个并得到有意义的结果-这是U.B.,除非它们都指向同一个对象(
malloc
内存块、静态或自动对象等)。因此,指针的允许范围概念在标准C++中是没有意义的。p> 指针不是数字。特别是,它们不是绝对有序的-给定两个随机指针
p
q
,您无法从另一个指针中减去一个并得到有意义的结果-这是U.B.,除非它们都指向同一个对象(
malloc
内存块、静态或自动对象等)。因此,指针的允许范围概念在标准C++中是没有意义的。p> 解释您试图解决的问题,而不是询问如何实施您选择的解决方案。我闻到了一些非常刺鼻的味道。你想让编译器检测系统中有多少内存可用??除了NULL,指针中的实际值是不透明的。即使NULL也不能保证有任何类型的位模式,只是它是唯一的。如果您只想了解32位体系结构与64位体系结构,那么有一些特定于编译器的
#defines
会告诉您。re:Amardeep,模板化的trie容器类根据用作其提供的密钥类型标记的类型的最大值和最小值进行参数化。我想使用指针列表作为键类型,因此给出一个指针作为令牌类型。要完成参数化,我需要有效指针值的范围。为什么不想使用
sizeof
计算最大值?请解释您试图解决的问题,而不是询问如何实现您选择的解决方案。我闻到了一些非常刺鼻的味道。你想让编译器检测系统中有多少内存可用??除了NULL,指针中的实际值是不透明的。即使NULL也不能保证有任何类型的位模式,只是它是唯一的。如果您只想了解32位体系结构与64位体系结构,那么有一些特定于编译器的
#defines
会告诉您。re:Amardeep,模板化的trie容器类根据用作其提供的密钥类型标记的类型的最大值和最小值进行参数化。我想使用指针列表作为键类型,因此给出一个指针作为令牌类型。要实现参数化,需要有效的指针值范围。为什么不想使用<代码> sieOS/<代码>计算最大值?注意< C++ >代码> <代码>不是当前C++的一部分;它在C99中被添加到C++中,并将出现在即将到来的C++ 0x标准中。它是在C99中添加到C中的,并将出现在即将到来的C++0x标准中。这是一个信息量,但我不确定它是否密切相关。唯一要做的指针算法是比较,根据,指向不同对象的指针可以安全且一致地与
std::less
进行比较。假设存在绝对顺序,则也存在绝对范围。在这种情况下,应用运算符
,也同样未定义。但实际上,对于
std::less
,这是一个很好的观点——尽管它不必用
来定义,因为这是信息性的,但我不确定它是否密切相关。唯一要做的指针算法是比较,根据,指向不同对象的指针可以安全且一致地与
std::less
进行比较。假设存在绝对顺序,则也存在绝对范围。在这种情况下,应用运算符
,也同样未定义。但实际上,对于
std::less
,这是一个很好的观点——尽管它不必用