当前位置:  开发笔记 > 编程语言 > 正文

通过隐式转换小于运算符?

如何解决《通过隐式转换小于运算符?》经验,为你挑选了1个好方法。



1> Ralph Tandet..:

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概念的要求是,对于对象xy类型Cconst C表达式x是有效的并且可以隐式地转换为bool,并且<运算符建立严格的弱有序关系.在你的情况下,const对象不会转换为ints.这是代码中的错误,因为它不是const正确的.添加const关键字将使其工作,而类C确实会LessThanComparable.严格的弱有序关系得以实现,因为ints满足了这一要求.

C满足需要类型的假设的概念算法库的要求LessThanComparable.

如果你修复你的常数,是的,它会.

一些旁注:

GCC 4.9编译x即使xy有型const C.这似乎是一个编译器错误,因为GCC 5.2和clang 3.6在这里抛出编译时错误.

传递std::less()一个额外的参数来std::sort()给出一个编译时错误,因为比较功能需要不断的对象是在这种情况下,具有可比性.但是,传递std::less()不会破坏任何东西,因为参数完全转发.

std::sort()算法不需要完整LessThanComparable,但概念Compare.此外,迭代器类型必须是RandomAccessIterator,ValueSwappable并且取消引用类型必须是MoveContructableMoveAssignable.对于第一个问题,这就是所有情况,即使constness bug没有修复.这就是原因std::sort()和其他标准算法的工作原理.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有