我知道指针的关系运算符仅在有限的情况下提供可靠的结果,并且不能保证它们生成总顺序。但是,这些运算符的标准函数对象确实具有生成总顺序的特化。
那么是什么阻止了对内置运算符应用相同的规则呢?这似乎并没有简化任何事情,因为仍然需要可靠的比较(通过一些特定于实现的方法)才能使这些函数对象起作用。
此外,仅使用内置运算符是否可以对指针进行可靠比较?虽然看起来不可能,但我想在这里确认一下。
最佳答案
并不是说他们不生成总订单,只是不能保证他们会这样做。实际上,它们通常会在大多数现代硬件上服从总排序。只是标准无法保证。
当然,一个实现总是可以强制他们这样做,但归结为 C++ 指导原则,“你不用为你不用的东西付费”。在某些 CPU 上,这样做的成本可能更高。
假设您的 CPU 具有更复杂的地址模型,例如分段地址空间。在那种情况下,确定一个指针是否“大于”另一个指针不再那么简单。所以 C++ 标准允许两者:“通常的”弱指针比较规则只保证某些有限情况下的总排序(基本上,当指针指向同一个数组时,保证是线性和顺序的并且可以非常有效地实现) 和包装函数,如 std::less
,它在某些 CPU 上可能更昂贵,但确实保证了所有指针的总排序。
关于c++ - 为什么指针类型的内置关系运算符不在 C++ 中生成总顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580825/