当前位置: 首页 > 知识库问答 >
问题:

指针如何完全排序?

谢阳成
2023-03-14

C++中的指针通常只能比较是否相等。相比之下,小于比较只允许指向同一个完整对象(例如数组元素)的子对象的两个指针。

我看了一下GCC4.7.2和Clang3.2,它们根本不包含任何指针类型的专门化。它们似乎依赖于<在其支持的所有平台上无条件有效。

共有1个答案

司寇山
2023-03-14

指针可以完全有序吗?不是在可移植的标准C++中。这就是为什么标准要求执行来解决问题,而不是你。对于指针的任何给定表示形式,应该可以定义任意的总顺序,但如何定义将取决于指针的表示形式。

对于具有平面地址空间和字节寻址的机器,只将指针视为大小相似的整数或无符号整数通常就足够了;这也是大多数编译器处理对象内比较的方式,因此在这样的机器上,库不需要专门处理std::less等。“未指明”的行为只是碰巧做了正确的事情。

对于word寻址计算机(并且至少有一台仍在生产中),可能需要将指针转换为void*才能进行编译器本机比较。

编辑:

在其他值得提及的事情上,也许:C++标准中的保证只适用于标准C++,或者在本例中,从标准C++获得的指针。在大多数现代系统中,mmap将同一个文件映射到两个不同的地址范围是相当容易的,并且有两个指针PQ,它们比较不相等,但指向同一个对象。

 类似资料:
  • 一般来说,大家会觉得 TLS 是典型的系统工程问题,通常只有要写 HTTPS server 的人才会关注。可实际上 TLS 设置和公司的域名相关,和公司打算提供 的 Web 服务相关,是 CEO 或者至少 CTO 应该了解的。

  • MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。 ls 列出文件和文件夹。 mb 创建一个存储桶或一个文件夹。 cat 显示文件和对象内容。 pipe 将一个STDIN重定向到一个对象或者文

  • 指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为 二级指针,或者 指向指针的指针。 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示: 将这种关系转换为C语言代码: 指针变

  • 6. 指向指针的指针与指针数组 指针可以指向基本类型,也可以指向复合类型,因此也可以指向另外一个指针变量,称为指向指针的指针。 int i; int *pi = &i; int **ppi = &pi; 这样定义之后,表达式*ppi取pi的值,表达式**ppi取i的值。请读者自己画图理解i、pi、ppi这三个变量之间的关系。 很自然地,也可以定义指向“指向指针的指针”的指针,但是很少用到: int

  • 我按照这个指南使用kubeadm安装了kubernetes集群。一段时间后,我决定重新安装K8s,但遇到了麻烦,删除所有相关文件,并没有找到任何官方网站上的文件如何删除集群安装通过kubeadm。有人遇到过同样的问题,并且知道删除所有文件和依赖项的正确方法吗?提前感谢。 有关详细信息,我使用<code>apt-get purge/remove</code>删除了kubeadm、kubectl和ku

  • 本文向大家介绍Paypal支付不完全指北,包括了Paypal支付不完全指北的使用技巧和注意事项,需要的朋友参考一下 啥都不说,先吐槽 Paypal 真心坑爹,跟国内支付完全没法比,能不接入就不接入吧!!! 准备工作 重要事情 Paypal下单支付后,需要主动跟paypal确认收款(capture),否则该笔订单并不是完成状态!!! 账号 自己前往Paypal develop注册一个吧,注意区分沙箱