这段代码中 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。
此外,dist
是 std::vector<int>
但奇怪的是,如果我将 decltype(f2)
替换为 f2
,代码会出错。
为什么会这样?
priority_queue
模板的第三个参数 class 是谓词类型。这里 decltype(f2)
实际上给出了 f2
的类型,而不是 decltype
你可以只写 std::function<bool(int,int)>
.
参考documentations,priority_queue
必须接收3种类型。这里,类型 int
和 vector<int>
后跟的是 f2 而不是 f2 的类型。 decltype
给你的是类型而不是变量。
注意:decltype
= typeof
但以官方方式
我不知道你为什么使用这个 std::function<bool(int,int)>
作为你的 lambda 函数的 return 类型,我会简单地使用 auto
因为 std::function 也可能在类型构造期间提供一些开销。如果您不知道它的作用,让编译器为您做出最佳选择。
我写了一小段代码,它会抛出很多错误,如果我不使用 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。
此外,dist
是 std::vector<int>
但奇怪的是,如果我将 decltype(f2)
替换为 f2
,代码会出错。
为什么会这样?
priority_queue
模板的第三个参数 class 是谓词类型。这里 decltype(f2)
实际上给出了 f2
的类型,而不是 decltype
你可以只写 std::function<bool(int,int)>
.
参考documentations,priority_queue
必须接收3种类型。这里,类型 int
和 vector<int>
后跟的是 f2 而不是 f2 的类型。 decltype
给你的是类型而不是变量。
注意:decltype
= typeof
但以官方方式
我不知道你为什么使用这个 std::function<bool(int,int)>
作为你的 lambda 函数的 return 类型,我会简单地使用 auto
因为 std::function 也可能在类型构造期间提供一些开销。如果您不知道它的作用,让编译器为您做出最佳选择。