c++ - 为什么指针类型的内置关系运算符不在 C++ 中生成总顺序?

标签 c++ pointers comparison

我知道指针的关系运算符仅在有限的情况下提供可靠的结果,并且不能保证它们生成总顺序。但是,这些运算符的标准函数对象确实具有生成总顺序的特化。

那么是什么阻止了对内置运算符应用相同的规则呢?这似乎并没有简化任何事情,因为仍然需要可靠的比较(通过一些特定于实现的方法)才能使这些函数对象起作用。

此外,仅使用内置运算符是否可以对指针进行可靠比较?虽然看起来不可能,但我想在这里确认一下。

最佳答案

并不是说他们不生成总订单,只是不能保证他们会这样做。实际上,它们通常会在大多数现代硬件上服从总排序。只是标准无法保证。

当然,一个实现总是可以强制他们这样做,但归结为 C++ 指导原则,“你不用为你不用的东西付费”。在某些 CPU 上,这样做的成本可能更高。

假设您的 CPU 具有更复杂的地址模型,例如分段地址空间。在那种情况下,确定一个指针是否“大于”另一个指针不再那么简单。所以 C++ 标准允许两者:“通常的”弱指针比较规则只保证某些有限情况下的总排序(基本上,当指针指向同一个数组时,保证是线性和顺序的并且可以非常有效地实现) 和包装函数,如 std::less,它在某些 CPU 上可能更昂贵,但确实保证了所有指针的总排序。

关于c++ - 为什么指针类型的内置关系运算符不在 C++ 中生成总顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580825/

相关文章:

c++ - boost::filesystem、std::getenv 和并发

c - 来自不兼容指针类型的警告初始化 - C 函数指针数组

c - 用 calloc 初始化的随机数填充指针数组的问题

algorithm - 在大型文件中查找部分相似的文件

.net - IronPython 与原始 Python 的比较。我对第一个有什么期望?

c++ - 内存映射文件和指向易失对象的指针

c++ - 了解 MSVS C++ 编译器优化

c++ - vector 第一个指针的变化

java - java中不同方式比较字符串的区别

c++ - C++中 vector 的初始容量