当模板参数要求 std::less<T> 时,编译器如何在 std::set 中使用 T::operator<?

Ari*_*ler 0 c++

创建 时std::set,模板参数之一是class Compare,默认为std::less<T>

现在,即使您没有给出 的专业化std::less<T>,定义T::operator<也足以让 C++“弄清楚”。但是 C++ 并没有解决任何问题,编译器可以。

编译器正在经历一系列我确信都是简单的步骤。那些步骤是什么?

Fra*_*eux 5

标准库被定义为std::less<T>将使用,operator<除非另有专门。所以如果你不提供专业化,如果类型支持,<那么它会起作用。

来自std::less<T>

用于执行比较的函数对象。除非专门,否则调用operator<type T

而对于std::less<T>::operator()

可能的实现:

constexpr bool operator()(const T &lhs, const T &rhs) const
{
    return lhs < rhs;
}
Run Code Online (Sandbox Code Playgroud)