是
C
在标准算法可像std::sort
当前使用的默认<
操作?
是的,它适用于std::sort()
和其他一些标准算法.代码
#include#include struct C { /* Class contents, without any arithmetic operator... */ constexpr operator int() noexcept {return 0;} // Implicit conversion to int }; int main() { std::vector v; std::sort( begin(v), end(v) ); }
编译.这是一个现场演示.看看下一个问题吧!
被
C
认为是令人满意的LessThanComparable
概念?
否.LessThanComparable
概念的要求是,对于对象x
和y
类型C
或const C
表达式x
<
运算符建立严格的弱有序关系.在你的情况下,const对象不会转换为int
s.这是代码中的错误,因为它不是const正确的.添加const
关键字将使其工作,而类C
确实会LessThanComparable
.严格的弱有序关系得以实现,因为int
s满足了这一要求.
将
C
满足需要类型的假设的概念算法库的要求LessThanComparable
.
如果你修复你的常数,是的,它会.
一些旁注:
GCC 4.9编译x
x
和y
有型const C
.这似乎是一个编译器错误,因为GCC 5.2和clang 3.6在这里抛出编译时错误.
传递std::less
一个额外的参数来std::sort()
给出一个编译时错误,因为比较功能需要不断的对象是在这种情况下,具有可比性.但是,传递std::less
不会破坏任何东西,因为参数完全转发.
该std::sort()
算法不需要完整LessThanComparable
,但概念Compare
.此外,迭代器类型必须是RandomAccessIterator
,ValueSwappable
并且取消引用类型必须是MoveContructable
和MoveAssignable
.对于第一个问题,这就是所有情况,即使constness bug没有修复.这就是原因std::sort()
和其他标准算法的工作原理.