这段代码中 decltype 的用途是什么?

What is the use of decltype in this code ?

我写了一小段代码,它会抛出很多错误,如果我不使用 decltype 关键字而使用 decltype 关键字它编译得很好:-

   std::function<bool(int,int)> f2 = [dist](int n1,int n2) {if(dist[n1] < dist[n2]) return false ; return true ; } ; 
        priority_queue<int,vector<int>,decltype(f2)>  pq(f2)  ; 

在这里,我想用我自己的自定义比较函数声明一个priority_queue,所以我决定使用std::function和lambdas。
此外,diststd::vector<int>

但奇怪的是,如果我将 decltype(f2) 替换为 f2,代码会出错。

为什么会这样?

priority_queue 模板的第三个参数 class 是谓词类型。这里 decltype(f2) 实际上给出了 f2 的类型,而不是 decltype 你可以只写 std::function<bool(int,int)>.

参考documentationspriority_queue必须接收3种类型。这里,类型 intvector<int> 后跟的是 f2 而不是 f2 的类型。 decltype 给你的是类型而不是变量。

注意:decltype = typeof 但以官方方式

我不知道你为什么使用这个 std::function<bool(int,int)> 作为你的 lambda 函数的 return 类型,我会简单地使用 auto 因为 std::function 也可能在类型构造期间提供一些开销。如果您不知道它的作用,让编译器为您做出最佳选择。