“uintptr_t”类型是否定义了总排序? C++中的指针没有定义的总排序,除非它们属于一组狭窄的标准,例如是相同的子对象或数组(,)的所有部分。

“uintptr_t”类型是否定义了总排序? C++中的指针没有定义的总排序,除非它们属于一组狭窄的标准,例如是相同的子对象或数组(,)的所有部分。,c++,language-lawyer,C++,Language Lawyer,事实上,即使要提供基本的排序保证,您也不能使用运算符或一些好的阅读资料来解释它可能不起作用的原因。“假设这是定义良好的行为”是的,这是合理的假设,但不,当事物在内存中以增量方式排列时,它没有定义好以进行排序。相反,你会得到一些订单。注:具有不同位模式的两个指针可能指向同一内存,并可能转换为相同或不同的uintpttr\u t。因此,ptr1==ptr2并不意味着(uintpttr_t)ptr1==(uintpttr_t)ptr2“它能够在从void*到std::uintpttr_t并返回void

事实上,即使要提供基本的排序保证,您也不能使用
运算符或一些好的阅读资料来解释它可能不起作用的原因。“假设这是定义良好的行为”是的,这是合理的假设,但不,当事物在内存中以增量方式排列时,它没有定义好以进行排序。相反,你会得到一些订单。注:具有不同位模式的两个指针可能指向同一内存,并可能转换为相同或不同的
uintpttr\u t
。因此,
ptr1==ptr2
并不意味着
(uintpttr_t)ptr1==(uintpttr_t)ptr2
“它能够在从void*到std::uintpttr_t并返回void*的往返过程中幸存下来,而不会丢失任何数据。”-->更像是往返到等效指针,不一定是相同的位模式。了解您的更高级别目标会很有用。@chux,我不确定如何遵循
ptr1==ptr2
可能是真的,但
uintptr\u t
版本不会是真的。两个指针如何在标准C++中引用相同的对象,但有不同的位模式?您是否正在考虑分段架构的情况,其中两个偏移指的是相同的值?不管怎么说,你可以随便把它写进一个有参考的答案里,我很乐意接受,因为这离我过去的日子不远了expecting@chux-2个具有不同位模式的指针可能指向同一内存,并可能转换为相同或不同的
uintpttr\u t
不确定此处为什么需要“不同位模式”。将具有相同位模式的两个指针转换为
uintptr\u t
可能会产生两个不同的整数值。