是否有原因std::priority_queue
的构造函数通过常量引用接受比较器?如果比较器超出范围怎么办?
我在考虑是否可能像@LightnessRacesInOrbit指出的那样移动比较器的上下文中考虑了这一点!
很抱歉,如果已经有关于此的帖子。我找不到它!
最佳答案
我以前从未真正考虑过,而const-ref确实有点误导。但是,在移动语义出现之前就已经考虑过功能签名,因此以值(value)接受一切成为流行。确实,比较器已被复制!
Lambda不是可复制分配的,但它们是可复制构造的,因此这里没有问题。
这是否会阻止比较器本身的移动构造?是的,它确实。我将假设这种约定,即通过const-ref获取比较器然后将其复制的约定,源于STL时代,即移动语义之前。我认为并没有认真考虑添加重载来按值获取比较器,因为这会增加复杂性,并且您一开始就不应该具有复杂的,可移动的比较器(肯定地说,但不要太多) 。不过,如果您能提出一个可靠的用例来移动比较器,则可能值得委员会提出建议。
关于c++ - std::priority_queue中的比较器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35190585/